MySlug DB2820387 http://www.myslug.de/index.php?title=Hauptseite MediaWiki 1.42.1 first-letter Medium Spezial Diskussion Benutzer Benutzer Diskussion MySlug MySlug Diskussion Datei Datei Diskussion MediaWiki MediaWiki Diskussion Vorlage Vorlage Diskussion Hilfe Hilfe Diskussion Kategorie Kategorie Diskussion Hauptseite 0 1 1 2009-06-02T14:59:56Z MediaWiki default 0 wikitext text/x-wiki MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] 8f97987bef301ef942cba7631ca7de7e55a84435 2 1 2009-06-02T15:07:56Z 88.217.114.96 0 wikitext text/x-wiki MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] [[Bild:Alex.jpg|Testbild]] 268394c8be669d3fdf0e9389f4fb33fef0cecf87 3 2 2009-06-02T15:08:37Z 88.217.114.96 0 wikitext text/x-wiki MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] [Bild:Alex.jpg|Testbild] bac60e6b1d3aa3c7e1231de67ae0ec241be052b8 4 3 2009-06-02T15:13:49Z Admin 1 wikitext text/x-wiki MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] [[Bild:Alex.jpg|Testbild]] 268394c8be669d3fdf0e9389f4fb33fef0cecf87 13 4 2009-06-02T15:26:12Z Admin 1 wikitext text/x-wiki MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU be9860cc8131617b88e91a24885b488ee278bf3d Datei:Alex.jpg 6 2 5 2009-06-02T15:14:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Sidebar 8 3 6 2009-06-02T15:19:45Z Admin 1 Die Seite wurde neu angelegt: „* navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randomp...“ wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help * NLSU2 ** Slug als Webserver|Slug als Webserver * SEARCH * TOOLBOX * LANGUAGES 13c4155c02e2f633b7dac17fa5aba5e1eb9a5a0a 7 6 2009-06-02T15:20:44Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help * NSLU2 ** Slug als Webserver|Slug als Webserver * SEARCH * TOOLBOX * LANGUAGES d26ac1d05c447c3bb16217251016189af4b970fa 9 7 2009-06-02T15:23:46Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver * SEARCH * TOOLBOX * LANGUAGES a9aa29e0187302aaf724e416ad498ffe685adeeb 24 9 2009-06-02T20:53:46Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Fragen zur Slug|Fragen zur Slug ** Downloads|Downloads ** Links|Links * SEARCH * TOOLBOX * LANGUAGES cc4bcbea9a14cde7132589228efd4b45add6a07f 30 24 2009-06-02T21:07:24Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug ** Downloads|Downloads ** Links|Links * SEARCH * TOOLBOX * LANGUAGES 4ab9412069995ba0f86300500832ac06215dd3ef 31 30 2009-06-02T21:09:15Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * SEARCH * TOOLBOX * LANGUAGES 3495c966f9a8df676fcecb83ab1d6b220098a020 Slug als Webserver 0 4 8 2009-06-02T15:21:32Z Admin 1 Die Seite wurde neu angelegt: „'''Achtung neu:''' Ich habe ein Forum für Eure Fragen zur NSLU2 / SLUG eingerichtet. Die Mailingliste ist zugunsten des Forums aufgelöst. Ihr findet das Forum u...“ wikitext text/x-wiki '''Achtung neu:''' Ich habe ein Forum für Eure Fragen zur NSLU2 / SLUG eingerichtet. Die Mailingliste ist zugunsten des Forums aufgelöst. Ihr findet das Forum unter http://www.gargi.org oder über die Sidebar unter community/kontact (Browsercache leeren, falls der Menüpunkt nicht zu sehen ist).<br /> '''Hinweis:''' Bitte verwendet einen aktuellen Browser. Mit Browsern in einer älteren Version werden oftmals Teile der Textformatierung nicht korrekt angezeigt. <br /> <br /> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Was ist eine NSLU2?== ... zumindest dachte ich mir das, als ich zum ersten Mal davon hörte. NSL steht als Abkürzung für '''N'''etwork '''S'''torage '''L'''ink. Das '''U''' selbst kann Unit oder auch USB bedeuten. Dieses spezielle Gerät, das hier auf dieser Seite etwas näher besprochen wird, wird von der Firma Linksys http://www.linksys.com vertrieben.<br /> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div> Derartige Geräte werden vom Grund her als Server für Datenspeicher innerhalb eines Netzwerkes verwendet. D.h. an einer NSL-Box wird ein Datenträger angeschlossen, z.B. eine externe USB-Festplatte oder ein Flashspeicher, der für alle Geräte innerhalb eines Netzwerkes zur Verfügung steht, je nachdem der Zugriff auf den Datenspeicher geregelt ist. Vielerorts werden für solche einfachen Aufgaben ganze Rechner in einem Netzwerk abgestellt. Der Vorteil solcher Lösungen liegt klar auf der Hand: Sie sind einfach zu konfigurieren, nehmen weniger Platz als ein kompletter Rechner ein, verbrauchen weniger Strom als ein "echter" Server und sind natürlich kostengünstig. Derzeit kostet ein neues NSLU2 um die 80,- Euro. Wer eine ausrangierte Festplatte zur Verfügung hat, der muss nur noch ca. 40,- Euro für ein USB-Gehäuse berappen. Somit kommt eine derartige Lösung auf rund 120,- Euro. Sie lässt sich somit recht einfach verbauen und stört auch nicht durch irgendwelche Laufgeräusche, da das Gerät selbst keine Lüfter verwendet. Hörbar ist nur eventuell die externe Platte selbst. Aber der Geräuschpegel hängt ebenso stark von der Qualität der verbauten Platte ab. Betrieben wird das Gerät dann an einem Switch oder auch Router, über den sämtliche Zugriffe innerhalb des Netzwerkes geregelt werden. Bei Anschaffung eines Routers, der vermutlich Anfragen auf ein DSL-Modem weiterleiten soll, sind für den erweiterten Betrieb einer NSLU2 (Web- Und/oder FTP-Server) folgende Eigenschaften von Vorteil: *Firewall/Virtual Server Routing: Hier wird die Anfrage von außerhalb gesteuert. Möchte man z.B. auf eine Website zugreifen, dann leitet der Router diese Anfrage auf eine festgelegte interne IP-Nummer weiter. Diese ist dann eben die für den NSLU2 festgelegte IP. *Dynamic DNS: Da man bei der Wiederanwahl in das Internet in der Regel eine neue IP bekommt, wird der Zugriff auf einen eigenen Server unnötig erschwert. Hierzu legt man sich dann z.B. über Dynamic Network Services DynDNS http://www.dyndns.org Namen fest, der dann bei der Wiedereinwahl die eigene IP-Nummer automatisch übermittelt bekommt. Somit ist man immer über den festgelegten Domain-Namen erreichbar und muss somit nicht mehr mit komplizierten IP-Nummern hantieren. *Auto Reconnect: Der Router sollte sich selbständig wieder an das Internet verbinden, sobald die Verbindung seitens des Providers getrennt wird. Hier bitte zwei Dinge beachten: Zum einen ist dies natürlich nur interessant, wenn ein zeit- und volumenunabhängiger Tarif abgeschlossen wurde, also eine klassische Flatrate. Alles andere wird TEUER!!! Zum anderen bitte darauf achten, ob hierbei nicht vertragliche Regelungen seitens Eures Providers derartige Nutzung untersagen. Bitte informiert Euch über beide WICHTIGEN Dinge. Denn beides kann Geld kosten! <div style="float:left;padding-right:20px"> [[Bild:nslu2_2.jpg|NSLU2]] </div> '''Wieso nun gerade dieses Gerät?''' Nach kurzer Zeit hat sich herausgestellt, dass im Inneren der NSLU2 ein normales Linux schlummert, das nun viel mehr kann, als nur Daten über das Netz zu schaufeln. Muss auch so sein, denn das Gerät wird über ein Web-Interface administriert, was zumindest schonmal einen Webserver im Inneren vermuten lässt. Und noch viel mehr! Der Datenspeicher ist zudem ein Samba-Server, der nun betriebssystemunabhängig verschiedene Betriebssysteme versorgen kann. Nachdem findige Leute die Maschine sich zur Brust genommen haben, war es sehr schnell möglich, weitere Programme hierauf zum Laufen zu bringen. Somit kann das Gerät auch als normaler Webserver, als FTP-Server, Mail-Server und auch für den Anschluss einer Webcam genutzt werden. Dabei verliert es nicht die Funktionalität, die es von Haus aus mitbringt: Ein Datenserver im Netz zu sein. Ich werde nun hier diverse Bearbeitungsschritte protokollieren, die ich selbst an diesem Gerät anhand diverser Anleitungen im Netz (div. FAQs und Newsgroup-Beiträge) durchprobiert habe, um zu demonstrieren, wieviel Power in diesem erstmal recht unscheinbar wirkenden Gerät steckt. Genug, um hierbei auch ein kleines Büro mit Daten zu versorgen und über das Internet für einen Datenaustausch erreichbar zu machen. '''All gates are open now!''' <br /> <br /> <br /> <br /> <br /> <br /> ==Wie flashe ich das Gerät?== <div style="float:right;padding-left:20px"> [[Bild:slug01.png|NSLU2]] </div> Dies könnt Ihr im Adminpanel mittels dieses Tools durchführen. Zuerst bitte die Festplatten abstöpseln. Beim Update darf die Festplatte '''NICHT''' angeschlossen sein. Jetzt als Admin ('''Administration''' anklicken) anmelden und auf '''Advanced'''. Hier dann Upgrade anklicken. Die Firmware als *.bin- File kann dann dort angegeben werden. Danach auf "'''Start Upgrade'''" klicken und abwarten. Das Tool startet die NSLU2 dann selbständig. Bitte den Updatevorgang NICHT unterbrechen. Es dauert in der Tat einwenig, bis Ihr eine Erfolgsmeldung bekommt und das Gerät neu gestartet wird. Nach dem Reboot solltet Ihr dann einen Hinweis auf der Startseite über Euere neue Firmware finden. Die aktuelle Firmware bekommt Ihr unter folgender URL: http://www.slug-firmware.net/u-dls.php. Die Originalfirmware gibt es unter dieser Adresse [http://www.linksys.com/servlet/Satellite?c=L_Download_C2&childpagename=US%2FLayout&cid=1115417109974&packedargs=sku%3D1115416906769&pagename=Linksys%2FCommon%2FVisitorWrapper]. Sollte das Gerät dabei "zerflasht" werden ist Ruhe zu bewahren! Man glaubt es fast kaum, aber ich persönlich habe den Eindruck, dass man mit einem großen Hammer auf die Kiste hauen muss, damit es tatsächlich kaputt ist. In den meisten Fällen läßt sich ein fehlgeschlagener Flash auch wieder retten, ohne dass das Gerät eingeschickt werden muss. Dazu bitte mein Kapitel "Notoperation!" lesen. Wer sich es zutraut, kann auch auf diese Art und Weise gleich die Firmware auf den internen Speicher schreiben. <br /> <br /> <br /> <br /> <br /> <br /> ==Notoperation!== Sollte irgendwann mal nichts mehr gehen, dann muss eine kleine Notoperation durchgeführt werden. Symptom: Das Gerät läßt sich nichtmehr ansteuern, kein Ping funktioniert und auch das mitgelieferte Setup-Programm von CD erkennt das Teil nicht mehr. Um das zu reparieren muss das Gerät neu geflasht werden. Ihr benötigt dazu ein Biosfile (bitte Version 2.3R25 [ftp://ftp.linksys.com/pub/network/nslu2-fw-2.3r25.zip] ) und einen Flasher, den Ihr HIER [http://www.nslu2-linux.org/wiki/Main/SercommFirmwareUpdater] herunterladen könnt. Den Flasher installiert dann gleich mal bevor Ihr weiter macht. ===Variante 1 (Windows)=== '''1.)''' Zuerst muss das Netzwerk auf '''192.168.0.x''' umgestellt werden. Dabei darf die Nummer '''192.168.0.1''' von keinem weiteren Gerät belegt sein, denn diese benötigt unsere kleine Box. '''2.)''' Steckt nun das Gerät an, schaltet es aber noch nicht ein! Jetzt eine Telnetsession mit '''telnet 192.168.0.1 9000''' aufmachen, aber '''NOCH NICHT''' mit Enter abschicken, sondern erstmal nur in die Dos-Shell eingeben! '''3.)''' Jetzt muss es ganz schnell gehen! Schickt den Telnetbefehl ab und drückt dabei gleichzeitig die Einschalttaste am Gerät. Wenn die Anzeige "'''Verbinden....'''" in eine erste Biosmeldung umschaltet müsst Ihr sofort die Taste''' STRG+C''' drücken. Wenn Ihr nun ein "RedBoot>" am Prompt erscheinen seht, dann seid Ihr "drin". Falls nicht muss die Prozedur wiederholt werden, bis Ihr den richtigen Moment trefft. '''4.)''' Nun gebt "'''upgrade'''" ein und drückt '''Enter'''. Jetzt müßte ein Status-LED am Gerät grün/orange (bei neueren Geräten dunkelorange/orange) blinken. '''5.)''' Startet nun das installierte Upgrade-Utility. Wählt hier Eure Netzwerkkarte aus und auf "'''Browse'''"->"'''Browse''' '''Targets'''" klicken. Nun müsstet Ihre eine MAC-Adresse sehen, die Ihr anklickt. Dann auf Files und Euer Bios (*.bin Datei) auswählen. Auf '''Öffnen''' klicken und mit '''OK''' bestätigen. Jetzt startet den Upgradevorgang indem Ihr auf den Button '''Upgrade''' drückt. '''6.)''' Das alles dauert nun ne kleine Weile. Zuerst wird das Eeprom gelöscht, danach neu aufgespielt und dann überprüft. Es versteht sich von selbst, dass hier nicht unterbrochen werden darf! Wenn alles gut gelaufen ist, dann sollte die Meldung "'''Upgrade succsessfully'''" erscheinen, die Ihr mit "'''OK'''" wegklickt. '''7.)''' Das Gerät startet von selbst neu. (Also wartet bis zum nächsten Piepsignal) '''8.)''' Falls Ihr nun unter der alten IP nicht mehr auf Euer Gerät kommt, dann wurde es auf '''192.168.1.77''' zurückgestellt. Das deutet allerdings auf einen Fehler hin, der sich mit einer Fehlermeldung im Adminpanel zeigt: "'''Can't get Samba Information'''". Wenn das der Fall ist, dann muss noch der Configbereich im Eeprom gelöscht werden. Macht nochmal einen RedBoot wie oben beschrieben. Gebt dann am Prompt folgendes ein: '''fis erase -f 0x50040000 -l 0x20000''' (Hinweis: das -l ist ein kleines L !!!) Bitte genau dies eingeben! Bei einen Tippfehler kann das Eeprom beschädigt werden! Danach ein '''reset''' eingeben. Dann funktioniert auch die Eingabe der Serverinfos im Administartionspanel wieder. '''HINWEIS:''' Es kann leider sein, dass neuer Netzwerkkarte vom UGUTIL nicht erkannt werden. Hierzu ist dann eine ältere Standard-Karte zu diesem Zwecke einzusetzen. Bei mir wurde der onboardchip eines Nforce4 Chipsatzes nicht erkannt. Dafür der Netgear WG111v2 USB Wlan-Stick. Ob ein Update über Funk ratsam ist sollte jeder für sich entscheiden. '''HINWEIS 2:''' Bevor unter Windows ein Update vorgenommen wird, sollte die Softwarefirewall kurzfristig dafür abgeschalten werden. Dies kann nur nervige Sperrungen hervorrufen, die das Updaten verzögern. '''HINWEIS 3:''' UGUTIL läuft leider nicht unter Vista 64bit <br /> <br /> <br /> ===Variante 2 (Linux)=== Der meine ich etwas einfachere Weg geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="Unslung-6.8-beta.bin"</pre></code> ''(das Beispiel gilt für die im Moment aktuelle 6.8 Firmware) '' Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="Unslung-6.8-beta.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre>linux:/home/test/Work/upslug2 # ./upslug2 --image="Unslung-6.8-beta.bin" LK........... xx:xx:xx:xx:xx:xx Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LK............. xx:xx:xx:xx:xx:xx . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Nachdem die Kiste automatisch neu startet ist die neue Firm wieder drauf. <br /> <br /> <br /> <br /> ==Unslingen und User einrichten== Zuerst wird über das Administrationspanel die neue Firmware eingespielt. Das funktioniert menügesteuert. Danach müssen wir das Gerät "entsichern", damit eine Telnet-Session zugelassen wird und wir in das geheiligte Innere der Maschine gelangen können. '''1.''' Startet die Kiste ohne angeschlossener Festplatte. Ruft jetzt im Browser unter Angabe der IP nebst des eventuell von Euch neu eingestellten voreingestellten Ports folgende URL auf: '''http://192.168.1.77:8080/Management/telnet.cgi''' Hier werdet Ihr nach dem Adminpasswort gefragt. Sollte das nicht verstellt sein, dann lautet es werkseitig admin:admin . Jetzt könnt Ihr bequem auf einen Button klicken, um die Telnetsession zu "enablen" (aktivieren). Vergesst bitte nicht, wenn Ihr mit Euren Arbeiten an der Slug fertig seid, hier wieder auf "disable" zu klicken, damit die Maschine vor Zugriffen gesichert ist. '''''Hinweis:''' Ab de unslug Version 6.8 kann man dies auch komfortabel auf der Startseite des Administrationspanel erledigen!!!'' Schaltet nun von Eurer Shell aus auf eine Telnetsession '''telnet [IP der Slug]''' '''''Hinweis:''' Ein sehr schönes Tool hierzu ist der Putty. Die Projektseite dazu findet Ihr hier: PuTTY: http://www.putty.nl/ Richtet ein Profil für die NSLU2 im Putty ein (in der Konfiguration telnet anklicken, die IP der Slug eintragen und als neues Profil mit einem Namen -z.B. nslu2 - abspeichern) und legt eine Verknüpfung an. Diese erweitert Ihr mit dem Parameter -load [profilname] , also unter Windows mit unserem nslu2 Profil z.B. putty.exe -load nslu2 . Dann genügt ein Doppelklick auf die Verknüpfung und Ihr habt schon eine Telnetverbindung zum gewünschten Client vor Euch auf dem Bildschirm.'' '''''Hinweis''''': Damit später auch die NSLU2 von der Konsole aus auf die Repositories zugreifen kann, muss im Webadmin noch ein Gateway eingetragen werden! Dies ist in der Regel die IP Eures Routers! Ohne diesen erhaltet Ihr beim Installieren von zusätzlichen Paketen eine Fehlermeldung. '''2.''' Telnet auf die Box und hier nun mit root:'''uNSLUng''' anmelden. Wenn Ihr als Root angemeldet seid, erhaltet Ihr in etwa diese Meldung: <code><pre>login: root Password: No directory, logging in with HOME=/ Welcome to Unslung V2.3R63-uNSLUng-6.8-beta -------- NOTE: RUNNING FROM INTERNAL FLASH -------- This system is currently running from the internal flash memory, it has NOT booted up into "unslung" mode from an external drive. In this mode, very few services are running, and available disk space is extremely limited. This mode is normally only used for initial installation, and system maintenance and recovery. BusyBox v0.60.4 (2005.03.22-06:52+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands.</pre></code> Danach die Festplatte wieder anschließen. Wartet nun ab, bis die Box die Festplatte als angeschlossen anzeigt (grünes LED an der Box, oder über das Web-Adminpanel). Jetzt seid Ihr in der Box schonmal drin. Damit nun das Betriebsystem auf die Festplatte ausgelagert wird (unslingen) gebt nun folgenden Befehl an der Konsole ein: '''/sbin/unsling disk2''' Ab der Firmwareversion 6.8 wird die Festplatte hierzu an den USB-Port 2 angeschlossen. Danach kann hier sogar ein root-Passwort eingegeben werden, was dann für das System generell gilt. Wenn das Unslingen fertig ist das Gerät neu starten. Die Platte bleibt am USB-Port2!!! Es dauert eine Weile, bis die Sache erledigt ist. Jetzt kann aufgrund des wesentlich größeren Speicherplatzes später entsprechend neue Software installiert werden. '''3.''' Ruft in Euerem Browser das Administrationspanel auf und legt einen neuen User an (z.B. testi). Dieser soll auch ruhig ein Heimatverzeichnis bekommen, also hier das im Konfigmenü auswählen. Speichern und beenden. Das neue Heimatverzeichnis liegt dann im Wurzelverzeichnis und trägt den Namendes Users, also in unserem Beispiel "/testi" '''4.''' In der Telnetkonsole dann '''vi /etc/passwd''' eingeben. Mit "i" in den Editmodus wechseln. '''5.''' Sucht nun die Zeile mit <code><pre>Testi:xyzverschlüsseltes.passwort:2002:501:::/dev/null</pre></code> Damit nun später die bash verwendet werden kann und auf das Verzeichnis auch via ftp ein Zugriff erfolgen kann, werden wir die Zeile hinten abändern. Dazu legen wir nochmal das Heimatverzeichnis des Users fest: <code><pre>testi:xyzverschlüsseltes.passwort:2002:501::/testi:/bin/sh</pre></code> '''6.''' Mit "'''ESC'''" den Editmodus verlassen. mit ":w" speichern und ":q" beenden. '''7.''' Zum Schluß updaten wir die Slug gleich und sehen dabei, ob unser neuer User wirklich Rootrechte hat. Hierzu folgendes ausführen: '''ipkg update'''<br /> '''ipkg upgrade''' Danach werden automatisch die neuesten Pakete gezogen und installiert. Zudem sollten noch folgende Einstellungen im Webadmin gemacht werden: Ruft dazu Eure Konfiguration auf und geht auf '''Administration - > System'''. Dann entfernt die Haken vor -> Enable Guest Logins<br /> -> Enable FTP-Server<br /> -> Enable UPnP Support '''Wichtig''' ist, dass Ihr noch den Port des Webadmins von 80 auf einen anderen ändert (8282 oder ähnliches). Den Port 80 benötigt Ihr dann für Euren Apache. Die Konfig sollte dann in etwa wie folgt aussehen: [[Bild:slug03.jpg|center]] '''''Hinweis:''' Ihr müsst nicht jedes mal den Webadmin bemühen, um die Slug neu zu starten. Ebenso ist es nicht notwendig, jedes Mal aufzustehen, und das Knöpfchen direkt am Gerät zu drücken. Wenn Ihr eh schon in der Konsole eingeloggt seid, dann geht das über zwei lockere Befehle am Prompt:'' '''sync'''<br /> '''reboot''' <br /> <br /> <br /> ==bash installieren== Ziel ist es, die bash soweit zu installieren, dass jeder User entsprechend die gleiche bash verwendet. Ich beziehe mich dabei auf die Anleitung von unslung.de, passe diese allerdings hie und da einwenig an, um vielleicht das eine oder andere einwenig chronologischer in der Beschreibung darzustellen. '''1)''' Alles passiert natürlich unter telnet. Loggt Euch mit Euerem root-Account ein, und installiert zuerst die bash: '''ipkg install bash''' '''2)''' Falls noch nicht geschehen legen wir unter '''etc''' eine Datei '''profile''' an und editieren diese gleich: '''vi /etc/profile''' ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' '''3)''' Nun fügen wir folgende zwei Zeilen in die Datei ein: '''export PS1="\[\033[1;33m\]\u@\h\[\033[0;37m\]:/> "'''<br/> und GANZ ZUM SCHLUSS '''test -f /opt/bin/bash && exec /opt/bin/bash''' Wer's etwas freundlicher beim Begrüßen mag, der kann oben in der '''etc/profile''' noch folgende Zeilen ergänzen: <code><pre>echo --------------------------------------------------------------------- echo "Hallo $USER, willkommen auf der Slug! ;-)" echo --------------------------------------------------------------------- echo </pre></code> '''4)''' Als nächstes legen wir im root-Verzeichnis die '''.bashrc''' an: '''vi /.bashrc''' In diese Datei können wir einige hilfreiche aliase und Umgebungsvariablen setzen. Ich empfehle folgende Zeilen einzugeben: <code><pre>alias "d=ls -la" alias "dir=ls -la" export PATH=$PATH:~/bin:. </pre></code> '''5)''' Die '''.bashrc''' muss nun in jedes Userverzeichnis kopiert werden, das sich im Rootverzeichnis befindet. <br /> <br /> <br /> ==Midnight Commander installieren== '''1)''' Zuerst muss das Programm installiert werden: '''ipkg install mc''' (falls vorher noch nicht geschehen, dann zuerst '''ipkg update''' eingeben!) '''2)''' Falls noch nicht geschehen, die Datei '''/etc/profile''' anlegen und editieren: '''vi /etc/profile''' '''3)''' Dort zwei Zeilen ergänzen: <code><pre>export TERMINFO=/opt/lib/terminfo export TERM=xterm-pcolor</pre></code> '''4)''' System neu starten. '''5)''' Midnight Commander mit '''/opt/bin/mc''' starten. Falls Ihr die bash installiert habt, könnt Ihr auch in der '''.bashrc''' folgendes ergänzen: '''alias "mc=/opt/bin/mc"''' Das macht die Sache recht praktisch, denn so wird das Programm ganz einfach mit einem '''mc''' in der shell gestartet. <br /> <br /> <br /> <br /> ==FTP-Server einrichten (vsftpd)== '''1)''' Zuerst legt man ein leeres Verzeichnis an:<br /> '''mkdir -p /usr/share/empty''' '''2)''' Vsftp-Daemon installieren:<br /> '''ipkg install vsftpd''' '''3)''' rc.xinetd Datei anlegen und mit Inhalt füllen:<br /> '''vi /unslung/rc.xinetd''' Dann im vi-Editor den Editmodus mit Drücken der Taste "i" aktivieren und folgendes abtippen: <code><pre>#!/bin/sh if ( [ ! -f /etc/inetd.conf ] || !(grep vsftpd /etc/inetd.conf -q) ) then echo "ftp stream tcp nowait root /opt/sbin/vsftpd /opt/etc/vsftpd.conf" >>/etc/inetd.conf fi return 1</pre></code> Bitte HAARKLEIN GENAU abschreiben! Bitte zweimal kontrollieren! Dann Edit-Modus mit "ESC" beenden und mit<br /> ''':w'''<br /> abspeichern und mit<br /> ''':q'''<br /> beenden '''4)''' vsftpd.conf editieren, damit jeder angemeldete User nur seinen eigenen Bereich sehen kann, und nicht in Toplevel wechseln kann: '''vi /opt/etc/vsftpd.conf''' Hier dann im Edit-Modus (Taste "i" !) folgende Zeile am Schluss ergänzen: '''chroot_local_user=YES''' Abspeichern und beenden! '''5)''' Logdatei für den ftp-Daemon erstellen:<br /> '''mkdir -p /opt/var'''<br /> '''mkdir -p /opt/var/log'''<br /> '''touch /opt/var/log/vsftpd.log''' '''6)''' Ersten User anlegen: Im normalen Adminpanel einen neuen User anlegen. Nennen wir ihn hier als Beispiel "upload". Dieser bekommt auch beim Erstellen ein Homedirectory auf der Platte zugesprochen. Jetzt müssen wir noch die passwd anpassen: '''vi /etc/passwd''' Den User "upload" suchen. Die Zeile sieht dann in etwa so aus: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501:::/dev/null</pre></code> Das ändern wir dann in folgender Weise ab: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501::/upload:/bin/sh</pre></code> Da auf der Slug nun alles auf dem USB-Port2 liegt, wäre das korrekte Verzeichnis '''/share/flash''' ... Wir umgehen das damit, indem wir den die Verlinkung unter '''/root''' verwenden. Somit wird dem User ein festes Heimatverzeichnis zugewiesen, das sich eben auf der Platte befindet. Das alles wie oben schon beschrieben dann speichern und beenden. '''7 )''' Die NSLU dann neu starten und mit einem ftp-Clienten oder via Webbrowser <code><pre>ftp://username:deinpasswort@ipnummerdernslu ausprobieren.</pre></code> Noch ein Tipp: Wenn man ein laufendes Protokoll sich anzeigen lassen möchte, dann macht eine Telnet-Session auf und gebt folgendes ein: '''tail -f /opt/var/log/vsftpd.log''' Dann habt Ihr immer im Blick, was gerade auf dem Server passiert. '''Hinweis 1:''' Solltet Ihr einen Tippfehler bei der Erstellung der /share/hdd/conf/unslung/rc.xinetd gebaut haben und startet das Dingens via Neustart der Kiste oder mit dem Befehl /etc/rc.d/rc.xinetd, dann kann es sein, dass Ihr eben keinen Zugriff via ftp bekommt. Ihr entdeckt dann zwar den Fehler im /share/hdd/conf/unslung/rc.xinetd aber auch nach Korrektur startet der FTP-Server nicht. Das liegt nun daran, dass beim ersten Start die Zeile echo"ftp... " in das /etc/rc.d/rc.xinetd Script MIT ÜBERNOMMEN wurde. Also hier dann den Fehler, sollte er in der echo-Zeile entstanden sein, auch ausbessern! Dann klappt es! Die Festplatte zu löschen und neu zu unslingen bringt auch nichts, da das etc/rc.d/rc.xinetd auf dem Flashspeicher liegt. Hier müsste man die Firm dann komplett neu aufspielen. Aber da lässt sich sicher besagte Datei einfacher und schneller editieren. <br /> <br /> <br /> ==Der Apache Webserver== Der Apache Webserver ist auf der Slug schnell installiert. Hierzu wird sich erstmal als root per telnet eingeloggt. Danach führen wir den Befehl '''ipkg install apache''' aus. Das System wird automatisch konfiguriert und der Webserver gestartet. Dieser liegt allerdings auf dem Port 8000. Ruft den Server nun mit '''[eure ip adresse]:8000''' auf. Es ergibt dann folgendes Bild: [[Bild:slug04.jpg|center]] Um den Apache nun anzupassen rufen wir die Konfigurationsdatei des Apache auf: '''vi /opt/etc/apache2/httpd.conf''' Wichtige Zeile/ Einträge: '''Listen 8000''' gibt den Standardport an. Ändert dies auf '''80''', um den normalen Port eines Webservers zu verwenden. '''DocumentRoot "/opt/share/www"''' legt fest, wo Eure Webfiles liegen. Idealerweise legt hier einen User an, den Ihr per ftp erreichen könnt. Auf dieses Userverzeichnis schreibt diese Zeile um. Z.b. nennt sich der User webserver . Also lautet die Zeile dann: '''DocumentRoot "/webserver"''' '''<Directory "/opt/share/www">''' muss ebenso angepasst werden (z.B. '''<Directory "/webserver">''' ) '''DirectoryIndex index.html index.html.var''' Diese Zeile ergänzt dann noch durch ein "'''index.htm''' und '''index.php'''" , damit auch Pages mit der htm und php Extention geladen werden können. Das sollten die wichtigsten Punkte sein. Im Internet finden sich noch eine Vielzahl an weiteren Konfigurationsmöglichkeiten für den Apache. Speichert Euere Änderungen ab. Kopiert nun eine Testpage auf Euer Webverzeichnis und startet die Slug neu. Nun müsste nach einer kurzen Wartezeit der Webserver mit Eurer normalen IP abrufbar sein. '''''Hinweis:''' Bei Eurem Webserver bitte die Files immer via ftp und nicht dem Samba-Share hochladen. Denn nur über einem ftp-Upload ist sichergestellt, dass Ihr keinen Access-Error wegen mangelnder Zugriffsrechte bekommt.'' <br /> <br /> <br /> ==PHP Erweiterung für Apache== Zuerst loggen wir uns wieder als root via einer Telnetsession ein. Danach installieren wir zwei Pakete: '''ipkg install php-apache eaccelerator''' Jetzt starten wir den Apache neu, indem wir folgenden Befehl absetzen: '''/opt/etc/init.d/S80apache''' Jetzt legen wir folgenden Code auf unsere Homepage: <code><pre><?php phpinfo() ?></pre></code> Das File speichern wir als "'''phpinfo.php'''" ab. Dieses rufen wir dann über unseren Browser auf: '''[deine ip nummer]/phpinfo.php''' Wenn alles funktioniert sollte dies in der Art zu sehen sein: [[Bild:slug05.jpg|center]] Dieses Script gibt nun Auskunft, welche Version des Apache und des PHP installiert ist. Hinweis! Sollte der php-Aufruf nur einen Plain-Text bringen, dann kann es sein das in einer möglichen neuern Apache Version der php-Aufruf in der '''/opt/etc/apache2/httpd.conf''' fehlt. Ergänzt hierfür am Ende der Datei folgende Zeilen: <code><pre>LoadModule php5_module libexec/libphp5.so AddType application/x-httpd-php .php .phtml</pre></code> <br /> <br /> <br /> ==Mysql Datenbank installieren== Mysql selbst installieren wir über ein Konsolenfenster als root. Hierzu gebt folgenden Installationsbefehl ein: '''ipkg install php-mysql''' Nachdem die Pakete installiert sind setzen wir sofort ein root- Passwort für die Datenbank: '''/opt/bin/mysqladmin -u root password dein_passwort''' Jetzt legen wir eine neue Datenbank mit den Namen Beispiel an: '''/opt/bin/mysqladmin -p create beispiel''' ''Hier muss nun Euer Passwort eingegeben werden '' Das wären die ersten wirklichen Fingerübungen am Prompt, was die Datenbank betrifft. Damit der Webserver die Datenbank auch sauber integriert startet die Slug einfach neu: '''sync'''<br /> '''reboot''' Ruft nun nochmal Euer phpinfo-Script auf, wie ich es im PHP-Abschnitt beschrieben habe. Im Bereich "'''addidional .ini files parsed'''" muss jetzt die '''mysql.ini''' stehen: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:slug06.jpg|NSLU2]]</div> Wer jetzt natürlich nicht unbedingt sich die Finger beim Eingeben von cryptischen Befehlszeilen am Prompt brechen möchte, wenn er seine Datenbank administriert, der braucht auch nicht auf seiner kleinen Slug auf die Vorzüge der grafischen Administration via phpmyadmin zu verzichten. Das Programmpaket kann man sich unter http://www.phpmyadmin.net herunterladen. Das entpackt man dann auf seinen Webserver und legt wie gehabt seine '''config.inc.php''' an. Bitte konsultiert die beiliegende Doku, um den genauen Installationsvorgang in Erfahrung zu bringen. Weiteres würde über den mir gesteckten Rahmen dieser Dokumentation hinaus gehen. Wenn Ihr die Dateien oben habt und die Zugriffe in der config geregelt habt, dann solltet Ihr das phpmyadmin wie gewohnt benutzen können: <br /> [[Bild:slug07.jpg|center]] '''''Hinweis:''' Hier ist es ratsam, über ein htaccess File das Verzeichnis zu schützen, auf dem das phpmyadmin abgelegt ist. Sonst kann ja jeder in der Datenbank herumpfuschen.'' ===Exkurs: htacces anlegen=== Das ist einwenig kniffeliger, aber ich denke, dass man das, wenn man sich Schritt für Schritt an meine Anleitung hält machbar. Zuerst müssen wir dem Apache erklären, dass er nicht nur Friedenspfeifen rauchen soll, sondern auch gesicherte Verzeichnisse zu verwalten hat. Dazu müssen wir seine Konfigurationsdatei "nachbehandeln". In einer telnet-Session rufen rufen wir diese als root im vi-Editor auf: '''vi /opt/etc/apache2/httpd.conf''' Die Zeile '''AllowOverride None''' muss auf '''AllowOverride All'''<br /> ''( i oder Einfg. zum Editieren drücken, ESC zum Verlassen des Editmodus)'' gesetzt werden. Dann mit :w speichern und mit :q verlassen. Jetzt startet den Apache wieder neu, damit die neue config eingelesen wird: '''/opt/etc/init.d/S80apache''' Somit sind wir entsprechend vorbereitet, die gewünschten Verzeichnisse zu sichern. Wir wollen nun das Verzeichnis des Webservers /phpmyadmin absichern. Dieses liegt auf der Slug Beispielsweise unter /webserver/phpmyadmin . Legt nun eine Datei .htaccess mittels vi an '''vi /webserver/phpmyadmin/.htaccess''' und füllt diese mit folgenden Zeilen: <code><pre>AuthType Basic AuthName Phpmyadmin AuthUserFile /webserver/phpmyadmin/.htpasswd require valid-user</pre></code> Hinter "'''AuthName'''" könnt Ihr eine beliebige Bezeichnung setzen. Diese wird dann nur eben später am Eingabefenster des Browsers angezeigt, wenn nach dem Passwort gefragt wird. Man kann natürlich noch einige Erweiterungen in die '''htaccess''' mit aufnehmen. Hierzu bietet sich ein sehr schönes Onlinekonfigurationsprogramm an, das Ihr unter folgender URL [http://www.harbeck-is.de/tools/htaccess_gen/htaccess_loader.php] abrufen könnt. Allerdings sollte unsere Konfig für das Erste genügen. Dann legen wir die Passwortdatei '''.htpasswd''' an. Dazu liefert uns der Apache ein Tool, das uns auch die Passwörter entsprechend verschlüsselt. <code><pre>htpasswd -C .htpasswd username</pre></code> Gebt nun das Passwort ein. Einen weiteren User legt Ihr mit <code><pre>htpasswd .htpasswd neueruser</pre></code> an. Macht auch diese Datei lesbar: <code><pre>chmod 644 .htpasswd</pre></code> Sollte der Aufruf '''htpasswd''' nicht funktionieren, so habt Ihr in der '''etc/profile''' den entsprechenden Suchpfad nicht eingetragen. Ihr könnt Euch auch kurzfristig damit behelfen: <code><pre> export PATH=$PATH:/opt/sbin:.</pre></code> Ansonsten solltet Ihr eh folgende Zeilen in die '''/etc/profiles''' aufnehmen: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Es funktionieren dann auch komplexere Anwendungen, wie z.B. das bekannte phpbb-Forum ( Download hier: http://www.phpbb.com/ ) Hinweise zur Installation entnehmt bitte der beiliegenden Dokumentation.<br /> Testinstallation: [[Bild:slug08.jpg|center]] <br /> <br /> ==Zeitgesteuerte Events - Die Crontab== Ihr könnt natürlich wie unter jedem Linux-System zweitgesteuerte Events, wie z.B. Sicherungen über die Crontab steuern. Im Internet findet Ihr eine Vielzahl an Seiten, die den genauen Aufbau der Crontab beschreiben. Da wir einen Webserver haben und mit einer Datenbank arbeiten, macht es Sinn, die Datenbank regelmäßig auf ein extra Verzeichnis zu speichern. Wir gehen in unserem Beispiel davon aus, dass wir die Datenbank "beispiel" alle 30 Minuten speichern wollen. Zuerst legen wir ein Script an, das unsere Datenabank wegsichert. Idealerweise habt Ihr einen weiteren user (z.B. test) angelegt, auf den Ihr ftp-Zugriff habt. In dessen Verzeichnis werden wir die Datenbank "dumpen". Die Datei legen wir wieder mit dem guten alten vi an: '''vi /usr/sbin/sqldump.sh''' Der Code sieht im Groben wie folgt aus: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) datenbankname > /zielverzeichnis/datenbankname.sql --default-character-set=utf8</pre></code> (bitte die /opt/bin ... in eine Zeile schreiben) In unserem Beispiel also: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) beispiel > /test/beispiel.sql --default-character-set=utf8</pre></code> Als Passwort (dann ohne die Klammern!!!) gebt Ihr Euer admin-Passwort ein, das Ihr bei der mysql-Installation festgelegt habt. Speichert die Datei ab. Jetzt müssen wir die Datei noch ausführbar machen. Das funktioniert über ein lockeres '''chmod +x /usr/sbin/sqldump.sh''' Testet das Script einfach, indem Ihr das Datenbank-Dumping per Hand startet: '''/usr/sbin/sqldump.sh''' Nun editieren wir die Crontab. Das machen wir alte Linux-Hasen wieder über den vi: '''vi /etc/crontab''' fügt ans Ende der Datei folgende Zeile ein: '''*/30 * * * * root /usr/sbin/sqldump.sh &>/dev/null''' Die Crontab sollte nun ungefähr so aussehen: <code><pre>SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ # ---------- ---------- Default is Empty ---------- ---------- # 0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null 0 0 * * * root /usr/sbin/WatchDog &>/dev/null 1 * * * * root /usr/sbin/hwclock -s &>/dev/null */30 * * * * root /usr/sbin/sqldump.sh &>/dev/null</pre></code> Speichert Euere Änderungen ab. Danach startet die Slug neu, damit die Crontab auch wieder neu eingelesen wird: '''sync'''<br /> '''reboot''' Prüft dann bei Gelegenheit nach, ob Ihr tatsächlich immer neue Sicherungen in Euer Sicherungsverzeichnis "gedumpt" bekommt. <br /> <br /> <br /> ==Prozessverwaltung mit htop== Unter Linux kennen wir alle das fast schon überlebensnotwendige '''top''' , das uns aktuelle Prozesse anzeigt und uns ermöglicht, auch einen unerwünschten Prozess zu "'''killen'''", wie es in der Linuxwelt so lautmalerisch tatsächlich heißt. Für die Slug gibt es ein ähnliches Programm, das sogar einwenig komfortabler gestaltet ist: '''htop'''. Installiert htop einfach mit einem <code><pre>ipkg install htop</pre></code> Legt dann noch eine Verknüpfung zu diesem Tool an: <code><pre>ln -s /opt/bin/htop /bin/htop</pre></code> Danach könnt Ihr das Programm ganz bequem mit <code><pre>htop</pre></code> starten. Ihr solltet dann folgendes Bild zu sehen bekommen: [[Bild:slug09.png|center]] Interessant hierbei ist noch die Darstellung der CPU Auslastung und der Speicherbelegung. Man sieht damit alles sehr schön auf einen Blick. <br /> <br /> <br /> ==Die Secure-Shell== Wer nicht ständig über das doch ungeschützte telnet auf seine Box zugreifen möchte, kann dies auch über die Secure-Shell (ssh) erledigen. Dazu installiert diese einfach mit einem <code><pre>ipkg install openssh</pre></code> Der Vorteil hierbei ist, dass nicht jedes Mal der Telnet aktiviert werden muss und die Angelegenheit entsprechend verschlüsselt über den Äther geht. <br /> <br /> <br /> ==Mehrere Konsolen mit Screen== Das kleine Programm Gnu Screen [http://www.gnu.org/software/screen/] ermöglicht den User auf einer Konsole mehrere Screens, also Konsolen zu aktivieren, zwischen denen man bequem umschalten kann. So kann beispielsweise eine Log-Datei mit tail oder der htop mitlaufen, während man am nächsten Screen weitere Arbeiten tätigt. Installiert wird Screen einfach durch ein <code><pre>ipkg install screen</pre></code> Das Programm wird dann an der Konsole mit einem <code><pre>/opt/bin/screen</pre></code> gestartet. Soltet Ihr '''/opt bin''' bereits als Suchpfad integriert haben, dann genügt ein <code><pre>screen</pre></code> Damit auch im "Screen" die bash verwendet wird, legt in Eurem Home-Verzeichnis des Users, der eben screen starten darf eine Konfigurationsdatei an: <code><pre>vi .screenrc</pre></code> Dort ergänzt Ihr die folgende Zeile: '''shell bash''' Speichert diese und startet screen neu. Wenn Ihr den Willkommensscreen abstellen wollt, dann schreibt folgende Zeile in die .screenrc: '''startup_message off''' Folgende Befehle solltet Ihr Euch merken: '''Strg+a c''' Startet eine neue Konsole<br /> '''Strg+a''' leer schaltet zwischen den Konsolen um<br /> '''exit''' beendet die Konsole (wenn eine Konsole übrig wird screen beendet)<br /> '''Strg+a d''' beendet screen, screen läuft aber im Hintergrund weiter<br /> '''screen -R''' startet wieder die im Hintergrund noch laufende Screen-Session<br /> Der wesentliche Vorteil von screen ist, dass alle Programme, die Ihr innerhalb der Screen-Session startet, auch dann weiter laufen, wenn Ihr Euch aus der Slug ausloggt. Somit könnt Ihr beispielsweise einen großen Download mittels curl starten, müsst aber nicht den nohup Befehl verwenden, sondern könnt jeder Zeit wieder Euch einloggen und mittels '''screen -R''' die Session aufnehmen und beispielsweise den statistischen Output von curl Euch ansehen. <br /> <br /> <br /> ==Datum und Uhrzeit einstellen== Dies könnt Ihr als root an der Konsole erledigen. Gebt dazu folgendes ein: <code><pre>date MONAT|TAG|STUNDE|MINUTE|JAHR</pre></code> Also wenn es der 4.12.2007 23:24 sein soll, dann muss der Befehl so aussehen: <code><pre>date 120423242007</pre></code> Über den Webadmin könnt Ihr dann zusätzlich noch die Uhrzeit für das Webpanel einstellen. <br /> <br /> <br /> 03b5bf32b2f9d0b3a0d045eaf02d7da8a2993b00 Impressum 0 5 10 2009-06-02T15:23:59Z Admin 1 Die Seite wurde neu angelegt: „[[Bild:pierrekretschmer.jpg]][[Bild:myslugimpressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardwa...“ wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:myslugimpressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge zu editieren, zu löschen oder zu blockieren. Beleidigende, rechtsverletzende oder nicht namentlich gekennzeichnete Kommentare (auch solche mit gefälschten Daten) werden gelöscht oder zum Zwecke der Strafverfolgung gesichert.Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden c23a1010ea2d37aa2efcc97a64b3866795d60c64 Datei:Pierrekretschmer.jpg 6 6 11 2009-06-02T15:24:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Myslugimpressum.jpg 6 7 12 2009-06-02T15:25:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Nslu2 1.jpg 6 8 14 2009-06-02T16:01:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Nslu2 2.jpg 6 9 15 2009-06-02T16:40:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug01.png 6 10 16 2009-06-02T16:46:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug03.jpg 6 11 17 2009-06-02T16:49:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug04.jpg 6 12 18 2009-06-02T18:05:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug05.jpg 6 13 19 2009-06-02T18:16:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug06.jpg 6 14 20 2009-06-02T18:17:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug07.jpg 6 15 21 2009-06-02T18:17:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug08.jpg 6 16 22 2009-06-02T18:18:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug09.png 6 17 23 2009-06-02T18:19:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Slugdebug 0 18 25 2009-06-02T20:54:32Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Fehler beim eaccelerator== '''Wichtig:''' Schaut bitte einmal Eure Apache Error-Log Datei an: '''/opt/var/apache2/log/error_log''' Es kann sein, dass die mittlerweile sehr groß geworden ist und förmlich von eaccelerator Meldungen ( could not lock ) ist. Der eaccereator cacht im php-Bereich und sorgt für etwas mehr Performance beim Laden. Solltet Ihr die error_log vol von eaccelerator Meldungen haben (die kommen im Sekundentakt wenn eine php Seite geladen wird), dann müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Dann brauchen wir noch die dev- Files der php Installation: <code><pre>ipkg install php-dev</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Nun entfernen wir den Beschleuniger: <code><pre>ipkg remove eaccelerator</pre></code> Und starten den Indianer neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun holen wir uns den Quellcode des aktuellen eaccelrator: <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> (auf der Projektseite [http://bart.eaccelerator.net] des eaccelerator könnt Ihr Euch über die aktuelle Versionsnummer informieren) Das Paket entpacken wir locker aus der Hüfte: <code><pre>tar vxf eaccelerator-0.9.5.3.tar.bz2</pre></code> Ab in das Buildverzeichnis: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Nun keine Zeit verschwenden und sofort <code><pre>phpize</pre></code> eingeben. Danach konfigurieren wir den php Beschleuniger mit folgendem einfachen Befehl: <code><pre>./configure --prefix=/opt --with-eaccelerator-userid=nobody</pre></code> Das kann einwenig dauern. Wenn alles fehlerfrei durch ist, kann das Programm gebacken werden: <code><pre>make</pre></code> Danach der obligatorische install: <code><pre>make install</pre></code> Da wir die Scriptfiles nicht manuell anlegen wollen tun wir jetzt das, was keiner erwartet: Wir installieren das Paket nochmal aus dem repository: <code><pre>ipkg install eaccelerator</pre></code> Das legt uns alle benötigten Pakete an Aber wir löschen wieder das File, damit wir unser eigenes verwenden können: <code><pre>rm /opt/lib/php/extensions/eaccelerator.so</pre></code> Und sofort unsere neue Datei rein: <code><pre>cp /work/eaccelerator-0.9.5.3/modules/eaccelerator.so /opt/lib/php/extensions/eaccelerator.so</pre></code> Alte Apache Logdatei tillen: <code><pre>rm /opt/var/apache2/log/error_log</pre></code> Frische Apache Logdatei erzeugen: <code><pre>touch /opt/var/apache2/log/error_log</pre></code> Jetzt startet den Apache nochmal neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Und schaut Euch die Error-Log an: '''tail -f /opt/var/apache2/log/error_log''' Nun ruft Eure Internetseite auf. Sollte natürlich php-Code sein. Die Fehlermeldungen sollten nun nichtmehr auftauchen. Zudem schaut Euch mal Eure phpinfo.php Datei an, ob der eaccelerator tatsächlich cached. Das seht Ihr in der Sektion EACCELERATOR [[Bild:slug10.jpg|center]] Bei dem fehlerhaften eaccelerator sind bei den Memory und cached File Bereich die "0" drin. Wenn es läuft, dann stehen hier entsprechende Werte. <br /> <br /> <br /> ==Fehler bei Midnight Commander== Wer bei einer neuen Installation den Fehler beim Start des MC bekommen sollte, dass ein libext2fs.so nicht gefunden werden kann, der muss das Paket e2fsprogs nachinstallieren: <code><pre>ipkg install e2fsprogs</pre></code> Sollte allerdings mittlerweile nicht mehr auftreten <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -l -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Wenn der Befehl hängen bleibt und Ihr nicht wieder zurück zur Eingabeaufforderung kommt, dann beendet dies mit '''STRG+C''' . Dieser Effekt kann durchaus mit der neueren 6.10er Firmware auftauchen. In diesem Fall lasst die '''-l''' Option weg: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -l -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Bei obigen Fehler auch hier ohne der '''-l''' Option: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==vsftpd Fehler in Version 2.1.0== Mit der Version 2.1.0 kommt es leider zu folgenden Fehler beim Verbinden: '''500 OOPS: could not bind listening IPv4 socket''' Vermutlich wurden beim Codieren einige default Einstellungen nicht einkompiliert. Um die Geschichte nun wieder zu reparieren editiert die '''vsftpd.conf''': <code><pre>vi /opt/etc/vsftpd.conf</pre></code> Fügt folgende Zeilen bitte ein: '''listen=NO'''<br /> '''anonymous_enable=NO'''<br /> '''local_enable=YES'''<br /> '''write_enable=YES''' <br /> Speichert die Änderung ab und beendet den '''inetd''': <code><pre>killall inetd</pre></code> Jetzt startet den '''inetd''' neu: <code><pre>/etc/rc.d/rc.xinetd</pre></code> Jetzt sollte der Connect zu Eurem ftp wieder funktionieren. 12678491c33c0a93ea01dc23f5ab0218a77c1d3d Datei:Slug10.jpg 6 19 26 2009-06-02T20:55:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Fragen zur Slug 0 20 27 2009-06-02T20:56:36Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Werden beim Flashen alle Settings gelöscht?== Nein, interne Einstellungen wie die IP Adresse, Name der Slug, Gateway werden beibehalten. <br /> <br /> ==Muss ich neu flashen, wenn ich die Slug neu einrichten will?== Nein, das ist nicht zwingend notwendig. Sollte man eventuell das Gerät so verkonfiguriert haben, dass man es neu aufsetzen möchte, dann genügt es, die Platte zu löschen und neu zu formatieren. Danach kann man das System wie gewohnt unslingen. <br /> <br /> ==Was passiert beim erneuten Unslingen?== Die Slug erkennt, wenn bereits geunslingt wurde. Auch hier funktioniert nicht das ursprüngliche uNSLUng Passwort, sondern Euer bereits gesetztes, obwohl keine Daten mehr auf der Platte zu finden sind. Beim erneuten Unslingen entfernt der Prozess ersteinmal einen Flag und fordert den User zum Neustart auf. Danach noch einmal den Unslingvorgang ausführen. Danach ist das System wieder geunslingt und Ihr könnt die Slug weiter konfigurieren. <br /> <br /> ==Warum findet ipkg update nichts und ich kann via ipkg nichts installieren?== Bitte tragt auf jeden Fall im Webadminbereichbereich einen Nameserver ein. Die Eingabemöglichkeit eines primären Nameservers findet Ihr unter Administration -> LAN. <br /> <br /> 4102948cffba6e9a6f76e829dc34be303ac38215 Downloads 0 21 28 2009-06-02T20:57:20Z Admin 1 Die Seite wurde neu angelegt: „Hier findet Ihr Programme, die ich über den Crosscompiler für die NSLU2 (unslung) übersetzt habe. Ihr könnt die Dateien per wget herunterladen. Installiert wi...“ wikitext text/x-wiki Hier findet Ihr Programme, die ich über den Crosscompiler für die NSLU2 (unslung) übersetzt habe. Ihr könnt die Dateien per wget herunterladen. Installiert wird das über <code><pre>ipkg install Paketname.version.ipk</pre></code> Deinstallieren könnt Ihr die Programme mit <code><pre>ipkg remove Paketname</pre></code> (wichtig: hier nur den Paktenamen ohne Versionsnummer angeben. Build Plattform: AMD Athlon X2 4600+, 2Gig of Ram, Opensuse 10.3 64 bit as host using a virtualboxed [http://www.virtualbox.org] guest Debian Etch 32 bit + Crosscompiler __TOC__ ==cURL== cURL Downloadprogramm, das folgende Protokolle beherrscht: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS und FILE. Zudem ist auch der gesicherte Transfer (SSL) möglich. '''Projektseite:''' http://curl.haxx.se<br /> '''version:''' 7.17.1-1<br /> '''source download:''' http://curl.haxx.se/download.html<br /> '''depends:''' openssl (Nur die SSL Version)<br /> '''build by:''' Pierre Kretschmer<br /> '''build Date:''' 26.11.2007<br /> Download optware nslu2 cross stable '''none SSL Version:''' http://dev.myslug.de/builds/curl/curl_7.17.1-1_armeb.ipk<br /> '''SSL Version:''' http://dev.myslug.de/builds/curl/curl-ssl_7.17.1-1_armeb.ipk<br /> <br /> <br /> 183d905b37be1723cd1e38b842c1178e40b8ce6b Links 0 22 29 2009-06-02T20:57:48Z Admin 1 Die Seite wurde neu angelegt: „'''Links zum Thema''' '''NSLU2-Linux:''' Die Projektseite zum Thema Slug Modifikationen. Erster Anlaufpunkt für alle, die mehr wissen wollen:<br /> http://www....“ wikitext text/x-wiki '''Links zum Thema''' '''NSLU2-Linux:''' Die Projektseite zum Thema Slug Modifikationen. Erster Anlaufpunkt für alle, die mehr wissen wollen:<br /> http://www.nslu2-linux.org/ '''Deutsches Slug Forum:''' Ein deutsches Message Board zum Thema NSLU2:<br /> http://www.nslu2-info.de/ '''Gargis Homepage:''' Meine Homepage mit Messageboard (auch für myslug.de):<br /> http://www.gargi.org/ <br /> ---- Sollten Sie einen passenden Link melden wollen, dann schicken Sie mir bitte die Meldung an mailto:info@myslug.de b66c12ffac9ad514061b6f78b6d8628e12ac4a7d Nativ kompilieren 0 23 32 2009-06-02T21:10:28Z Admin 1 Die Seite wurde neu angelegt: „==Native kompilieren== Damit wir einen Quellcode eines Programmes direkt auf der NSLU2 übersetzen können müssen wir zuerst die Build-Tools der Slug installier...“ wikitext text/x-wiki ==Native kompilieren== Damit wir einen Quellcode eines Programmes direkt auf der NSLU2 übersetzen können müssen wir zuerst die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. 30b998cc759e7ff1da9a3c664488e2ef8e066642 Der Crosscompiler 0 24 33 2009-06-02T21:11:07Z Admin 1 Die Seite wurde neu angelegt: „Um Programme außerhalb der NSLU2 für Unslung zu kompilieren muss eine Compilerumgebung auf einem Linux System aufgesetzt werden. Wer hierzu keine native Install...“ wikitext text/x-wiki Um Programme außerhalb der NSLU2 für Unslung zu kompilieren muss eine Compilerumgebung auf einem Linux System aufgesetzt werden. Wer hierzu keine native Installation anlegen möchte, oder dies getrennt von einem bereits installierten Linux erledigen will, für dem empfiehlt es sich eine virtuelle Maschine anzulegen. Als kostenloses Programm empfehle ich [http://www.virtualbox.org VirtualBox], das man auch ohne Weiteres auf einem Windows XP oder Vista installieren und damit ein Linux in Betrieb nehmen kann. Ich habe in meinen Beispiel ein Debian Linux (4.0r3 Etch) auf einer virtuellen Maschine installiert, damit ich diese sowohl unter Windows als auch unter Linux starten kann. Aber wie schon gesagt, zwingend notwendig ist die virtuelle Maschine nicht, sondern man kann dies auch auf ein nativ installiertes Linux durchführen. Folgende Pakete müssen unter Linux installiert werden: '''passende linux-headers''' <br /> '''build-essential''' <br /> '''subversion''' <br /> '''bison''' <br /> '''flex''' Die Header hängen von der jeweiligen Distribution und dem installierten Kernel ab. Welchen Kernel Ihr installiert habt könnt Ihr mittels dem Konsolenbefehl <code><pre>uname -a</pre></code> in Erfahrung bringen. Unter Debian installiert Ihr dann die Headers wie folgt: <code><pre>apt-get install linux-headers-2.VERSIONSNUMMER</pre></code> Danach installiert Ihr die restlich benötigten Pakete mittels <code><pre>apt-get install build-essential subversion bison flex</pre></code> Die Crosscompiler-Umgebung installiert Ihr über einen SVN Checkout. Gebt dazu an der Konsole folgenden Befehl ein: <code><pre>svn co https://svn.nslu2-linux.org/svnroot/optware/trunk optware</pre></code> Das legt Euch ein neues Unterverzeichnis namens '''optware''' an. Als nächstes müssen wir die Compilerumgebung einrichten. Wechselt dazu in das Optwareverzeichnis: <code><pre>cd optware</pre></code> Danach folgender Befehl: <code><pre>make nslu2-target</pre></code> Jetzt wechselt ein Verzeichnis weiter: <code><pre>cd nslu2</pre></code> Dann noch ein <code><pre>make directories ipkg-utils</pre></code> Bevor nun letztendlich ein Programm kompilierbar wird müssen noch einige Copilertools nachgezogen werden. Hierzu stoßen wir einfach einen Kompile eines kleinen Tools an, dessen Makefile bereits mitgeliefert wurde. Stellt sicher, dass Ihr eine offene Internetverbindung habt. Gebt dann aus dem aktuellen '''/optware/nslu2/''' Verzeichnis folgenden Befehl ein: <code><pre>make htop</pre></code> Das kann dann durchaus eine Ecke dauern. Der Compile sollte fehlerfrei durchlaufen. Bricht dieser mit einer Error Meldung ab, dann fehlt in der Regel noch ein Installationspaket Eures Debian Systemes. In der Regel gibt die Fehlermeldung darüber Aufschluss, welches Paket noch zu installieren ist. Allerdings sollte dies in der Basisversion durchlaufen. <br /> <br /> Die Scripte um ein Paket zu installieren liegen im Unterverzeichnis '''/make'''. Vom Prinzip her ist in diesem Makefile der komplette Uübersetzungsvorgang hinterlegt. Hier werden ersteinmal die allgemeinen Daten des Maintainers hinterlegt. Dann muss genau festgelegt werden, von woher die Quelldateien des Programmes geladen werden sollen. Das Makefile zieht sich die Quellen aus dem Netz, hinterlegt diese in einem Buildverzeichnis und lässt dann den Compiler darüber laufen. Der Vorgang wird mit einem <code><pre>make makefile</pre></code> gestartet. Wenn der Buildvorgang durch ist wird dann das ipk Paket gebaut, das man dann auf die Slug kopieren und installieren kann: <code><pre>make makefile-ipk</pre></code> Das fertige Paket liegt dann unter '''/optware/nslu2/builds'''.<br /> Wenn Ihr also ein neues Programm kompilieren wollt schaut Euch ein einfaches Makefile aus dem Make-Vereichnis an, gleicht es an das neue Programm entsprechend an und speichert es als neues Makefile mit dem Namen des Programmes ab ( '''programmname.mk''' ).<br /> <br /> Ein Makefile, das ich für den Compile für den curl-ssl geschrieben habe sieht wie folgt aus (bitte '''NICHT''' als Vorlage verwenden, da die Formatiereung hier teilweise Zeilen umbricht!!!!): <code><pre>########################################################### # # curl-ssl # ########################################################### # You must replace "curl-ssl" and "CURL-SSL" with the lower case name and # upper case name of your new package. Some places below will say # "Do not change this" - that does not include this global change, # which must always be done to ensure we have unique names. # # CURL-SSL_VERSION, CURL-SSL_SITE and CURL-SSL_SOURCE define # the upstream location of the source code for the package. # CURL-SSL_DIR is the directory which is created when the source # archive is unpacked. # CURL-SSL_UNZIP is the command used to unzip the source. # It is usually "zcat" (for .gz) or "bzcat" (for .bz2) # # You should change all these variables to suit your package. # Please make sure that you add a description, and that you # list all your packages' dependencies, seperated by commas. # # If you list yourself as MAINTAINER, please give a valid email # address, and indicate your irc nick if it cannot be easily deduced # from your name or email address. If you leave MAINTAINER set to # "NSLU2 Linux" other developers will feel free to edit. # CURL-SSL_SITE=http://dev.myslug.de/curl CURL-SSL_VERSION=7.17.1 CURL-SSL_SOURCE=curl-ssl-$(CURL-SSL_VERSION).tar.gz CURL-SSL_DIR=curl-ssl-$(CURL-SSL_VERSION) CURL-SSL_UNZIP=zcat CURL-SSL_MAINTAINER=NSLU2 Version myslug.de CURL-SSL_DESCRIPTION=Download Manager CURL-SSL_SECTION=net CURL-SSL_PRIORITY=optional CURL-SSL_DEPENDS=openssl CURL-SSL_SUGGESTS= CURL-SSL_CONFLICTS= # # CURL-SSL_IPK_VERSION should be incremented when the ipk changes. # CURL-SSL_IPK_VERSION=1 # # CURL-SSL_CONFFILES should be a list of user-editable files # CURL-SSL_CONFFILES=/opt/etc/curl-ssl.conf /opt/etc/init.d/SXXcurl-ssl # # CURL-SSL_PATCHES should list any patches, in the the order in # which they should be applied to the source code. # # CURL-SSL_PATCHES=$(CURL-SSL_SOURCE_DIR)/configure.patch # # If the compilation of the package requires additional # compilation or linking flags, then list them here. # CURL-SSL_CPPFLAGS= CURL-SSL_LDFLAGS= # # CURL-SSL_BUILD_DIR is the directory in which the build is done. # CURL-SSL_SOURCE_DIR is the directory which holds all the # patches and ipkg control files. # CURL-SSL_IPK_DIR is the directory in which the ipk is built. # CURL-SSL_IPK is the name of the resulting ipk files. # # You should not change any of these variables. # CURL-SSL_BUILD_DIR=$(BUILD_DIR)/curl-ssl CURL-SSL_SOURCE_DIR=$(SOURCE_DIR)/curl-ssl CURL-SSL_IPK_DIR=$(BUILD_DIR)/curl-ssl-$(CURL-SSL_VERSION)-ipk CURL-SSL_IPK=$(BUILD_DIR)/curl-ssl_$(CURL-SSL_VERSION)-$(CURL-SSL_IPK_VERSION)_$(TARGET_ARCH).ipk .PHONY: curl-ssl-source curl-ssl-unpack curl-ssl curl-ssl-stage curl-ssl-ipk curl-ssl-clean curl-ssl-dirclean curl-ssl-check # # This is the dependency on the source code. If the source is missing, # then it will be fetched from the site using wget. # $(DL_DIR)/$(CURL-SSL_SOURCE): $(WGET) -P $(DL_DIR) $(CURL-SSL_SITE)/$(CURL-SSL_SOURCE) || \ $(WGET) -P $(DL_DIR) $(SOURCES_NLO_SITE)/$(CURL-SSL_SOURCE) # # The source code depends on it existing within the download directory. # This target will be called by the top level Makefile to download the # source code's archive (.tar.gz, .bz2, etc.) # curl-ssl-source: $(DL_DIR)/$(CURL-SSL_SOURCE) $(CURL-SSL_PATCHES) # # This target unpacks the source code in the build directory. # If the source archive is not .tar.gz or .tar.bz2, then you will need # to change the commands here. Patches to the source code are also # applied in this target as required. # # This target also configures the build within the build directory. # Flags such as LDFLAGS and CPPFLAGS should be passed into configure # and NOT $(MAKE) below. Passing it to configure causes configure to # correctly BUILD the Makefile with the right paths, where passing it # to Make causes it to override the default search paths of the compiler. # # If the compilation of the package requires other packages to be staged # first, then do that first (e.g. "$(MAKE) <bar>-stage <baz>-stage"). # # If the package uses GNU libtool, you should invoke $(PATCH_LIBTOOL) as # shown below to make various patches to it. # $(CURL-SSL_BUILD_DIR)/.configured: $(DL_DIR)/$(CURL-SSL_SOURCE) $(CURL-SSL_PATCHES) make/curl-ssl.mk # $(MAKE) <bar>-stage <baz>-stage rm -rf $(BUILD_DIR)/$(CURL-SSL_DIR) $(CURL-SSL_BUILD_DIR) $(CURL-SSL_UNZIP) $(DL_DIR)/$(CURL-SSL_SOURCE) | tar -C $(BUILD_DIR) -xvf - if test -n "$(CURL-SSL_PATCHES)" ; \ then cat $(CURL-SSL_PATCHES) | \ patch -d $(BUILD_DIR)/$(CURL-SSL_DIR) -p0 ; \ fi if test "$(BUILD_DIR)/$(CURL-SSL_DIR)" != "$(CURL-SSL_BUILD_DIR)" ; \ then mv $(BUILD_DIR)/$(CURL-SSL_DIR) $(CURL-SSL_BUILD_DIR) ; \ fi (cd $(CURL-SSL_BUILD_DIR); \ $(TARGET_CONFIGURE_OPTS) \ CPPFLAGS="$(STAGING_CPPFLAGS) $(CURL-SSL_CPPFLAGS)" \ LDFLAGS="$(STAGING_LDFLAGS) $(CURL-SSL_LDFLAGS)" \ ./configure \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_TARGET_NAME) \ --target=$(GNU_TARGET_NAME) \ --prefix=/opt \ --disable-nls \ --disable-static \ --with-ssl=/opt/bin/openssl \ ) $(PATCH_LIBTOOL) $(CURL-SSL_BUILD_DIR)/libtool touch $@ curl-ssl-unpack: $(CURL-SSL_BUILD_DIR)/.configured # # This builds the actual binary. # $(CURL-SSL_BUILD_DIR)/.built: $(CURL-SSL_BUILD_DIR)/.configured rm -f $@ $(MAKE) -C $(CURL-SSL_BUILD_DIR) touch $@ # # This is the build convenience target. # curl-ssl: $(CURL-SSL_BUILD_DIR)/.built # # If you are building a library, then you need to stage it too. # $(CURL-SSL_BUILD_DIR)/.staged: $(CURL-SSL_BUILD_DIR)/.built rm -f $@ $(MAKE) -C $(CURL-SSL_BUILD_DIR) DESTDIR=$(STAGING_DIR) install touch $@ curl-ssl-stage: $(CURL-SSL_BUILD_DIR)/.staged # # This rule creates a control file for ipkg. It is no longer # necessary to create a seperate control file under sources/curl-ssl # $(CURL-SSL_IPK_DIR)/CONTROL/control: @install -d $(@D) @rm -f $@ @echo "Package: curl-ssl" >>$@ @echo "Architecture: $(TARGET_ARCH)" >>$@ @echo "Priority: $(CURL-SSL_PRIORITY)" >>$@ @echo "Section: $(CURL-SSL_SECTION)" >>$@ @echo "Version: $(CURL-SSL_VERSION)-$(CURL-SSL_IPK_VERSION)" >>$@ @echo "Maintainer: $(CURL-SSL_MAINTAINER)" >>$@ @echo "Source: $(CURL-SSL_SITE)/$(CURL-SSL_SOURCE)" >>$@ @echo "Description: $(CURL-SSL_DESCRIPTION)" >>$@ @echo "Depends: $(CURL-SSL_DEPENDS)" >>$@ @echo "Suggests: $(CURL-SSL_SUGGESTS)" >>$@ @echo "Conflicts: $(CURL-SSL_CONFLICTS)" >>$@ # # This builds the IPK file. # # Binaries should be installed into $(CURL-SSL_IPK_DIR)/opt/sbin or $(CURL-SSL_IPK_DIR)/opt/bin # (use the location in a well-known Linux distro as a guide for choosing sbin or bin). # Libraries and include files should be installed into $(CURL-SSL_IPK_DIR)/opt/{lib,include} # Configuration files should be installed in $(CURL-SSL_IPK_DIR)/opt/etc/curl-ssl/... # Documentation files should be installed in $(CURL-SSL_IPK_DIR)/opt/doc/curl-ssl/... # Daemon startup scripts should be installed in $(CURL-SSL_IPK_DIR)/opt/etc/init.d/S??curl-ssl # # You may need to patch your application to make it use these locations. # $(CURL-SSL_IPK): $(CURL-SSL_BUILD_DIR)/.built rm -rf $(CURL-SSL_IPK_DIR) $(BUILD_DIR)/curl-ssl_*_$(TARGET_ARCH).ipk $(MAKE) -C $(CURL-SSL_BUILD_DIR) DESTDIR=$(CURL-SSL_IPK_DIR) install-strip install -d $(CURL-SSL_IPK_DIR)/opt/etc/ # install -m 644 $(CURL-SSL_SOURCE_DIR)/curl-ssl.conf $(CURL-SSL_IPK_DIR)/opt/etc/curl-ssl.conf install -d $(CURL-SSL_IPK_DIR)/opt/etc/init.d # install -m 755 $(CURL-SSL_SOURCE_DIR)/rc.curl-ssl $(CURL-SSL_IPK_DIR)/opt/etc/init.d/SXXcurl-ssl # sed -i -e '/^#!/aOPTWARE_TARGET=${OPTWARE_TARGET}' $(CURL-SSL_IPK_DIR)/opt/etc/init.d/SXXcurl-ssl $(MAKE) $(CURL-SSL_IPK_DIR)/CONTROL/control # install -m 755 $(CURL-SSL_SOURCE_DIR)/postinst $(CURL-SSL_IPK_DIR)/CONTROL/postinst # sed -i -e '/^#!/aOPTWARE_TARGET=${OPTWARE_TARGET}' $(CURL-SSL_IPK_DIR)/CONTROL/postinst # install -m 755 $(CURL-SSL_SOURCE_DIR)/prerm $(CURL-SSL_IPK_DIR)/CONTROL/prerm # sed -i -e '/^#!/aOPTWARE_TARGET=${OPTWARE_TARGET}' $(CURL-SSL_IPK_DIR)/CONTROL/prerm if test -n "$(UPD-ALT_PREFIX)"; then \ sed -i -e '/^[ ]*update-alternatives /s|update-alternatives|$(UPD-ALT_PREFIX)/bin/&|' \ $(CURL-SSL_IPK_DIR)/CONTROL/postinst $(CURL-SSL_IPK_DIR)/CONTROL/prerm; \ fi echo $(CURL-SSL_CONFFILES) | sed -e 's/ /\n/g' > $(CURL-SSL_IPK_DIR)/CONTROL/conffiles cd $(BUILD_DIR); $(IPKG_BUILD) $(CURL-SSL_IPK_DIR) # # This is called from the top level makefile to create the IPK file. # curl-ssl-ipk: $(CURL-SSL_IPK) # # This is called from the top level makefile to clean all of the built files. # curl-ssl-clean: rm -f $(CURL-SSL_BUILD_DIR)/.built -$(MAKE) -C $(CURL-SSL_BUILD_DIR) clean # # This is called from the top level makefile to clean all dynamically created # directories. # curl-ssl-dirclean: rm -rf $(BUILD_DIR)/$(CURL-SSL_DIR) $(CURL-SSL_BUILD_DIR) $(CURL-SSL_IPK_DIR) $(CURL-SSL_IPK) # # # Some sanity check for the package. # curl-ssl-check: $(CURL-SSL_IPK) perl scripts/optware-check-package.pl --target=$(OPTWARE_TARGET) $(CURL-SSL_IPK)</pre></code> Da hier erstmal wenn Ihr das Programm neu erzeugt im Scriptfile alle CURL-SSL und curl-ssl Strings auf Euer neues Programm umgeschrieben werden muss bietet es sich an, dies über einen sed Befehl unter Linux zu erledigen. Sonst besteht die Gefahr, dass Ihr irgendwo vergesst, den Namen zu ändern und damit das Script nicht funktioniert. Wir nehmen einmal an, dass das Script curl-ssl.mk in das Programm testi.mk umgebaut werden muss. D.h. folgende Strings können wir automatisiert abändern:<br /> <br /> curl-ssl --> testi<br /> CURL-SSL --> TESTI<br /> <br /> Der Befehl lautet hierzu (curl-ssl.mk liegt bereits im /make-Verzeichnis und Ihr befindet Euch nach wie vor unter /optware/nslu2). Zuerst kopieren wir curl.ssl.mk als neue Datei testi.mk: <code><pre>cp make/curl-ssl.mk make/testi.mk</pre></code> Dann genau aufpassen beim Eintippen: <code><pre>sed -i 's/CURL-SSL/TESTI/g' make/testi.mk sed -i 's/curl-ssl/testi/g' make/testi.mk</pre></code> Jetzt müsst Ihr nur noch den Rest des Files angleichen. Es wird nicht ausbleiben, dass Ihr den einen oder anderen Fehler zuerst bekommen werdet. Hier müsst Ihr viel probieren, bis Ihr durch das Prinzip des Makefiles steigt. Aber wer halbwegs Erfahrung damit hat, wird letztendlich schnell damit zurecht kommen.<br /> <br /> Crosskompiler auf Debian Etch in einer VirtualBox auf Windows Vista 64bit Ultimate:<br /> [[Bild:crosscompile.jpg]] e5d164484ed106ac120b50089578b17b68235a7d Chkrootkit 0 26 35 2009-06-02T21:14:45Z Admin 1 Die Seite wurde neu angelegt: „==Wanzenjagd mit Chkrootkit== Wer seine kleine Schachtel ständig am Netz hängen lässt ist vor Angreifern natürlich nicht sicher. Deswegen ist Umsichtigkeit s...“ wikitext text/x-wiki ==Wanzenjagd mit Chkrootkit== Wer seine kleine Schachtel ständig am Netz hängen lässt ist vor Angreifern natürlich nicht sicher. Deswegen ist Umsichtigkeit sowohl in den Logs als auch bei den systemkritischen Dateien erstes Gebot! Die Linuxwelt spricht weniger von Viren, sondern bekannter sind Rootkits, die wichtige Systemdateien verändern damit der Angreifer Kontrolle über das System erlangt. Aber auch hierfür gibt es Tools, um zu prüfen, wie der Stand der Dinge ist. Ein regelmäßiger Check seines Servers ist auf jeden Fall erstes Gebot. In den Repositories der NSLU2 gibt es leider hierzu kein entsprechendes Tool, also werden wir selbst Hand anlegen. Wir werden dazu das bekannte Werkzeug chkrootkit verwenden. Die dazugehörige Page findet Ihr hier [http://www.chkrootkit.org/] Damit auf der Slug überhaupt etwas kompiliert werden kann müssen die Build-Tools installiert werden. Diese benötigen ca. 150 MB auf der Festplatte. <code><pre>ipkg install optware-devel</pre></code> Danach legen wir uns ein beliebiges Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln in dieses rein: <code><pre>cd work</pre></code> Jetzt holen wir uns das Quellpaket ab: <code><pre>wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz</pre></code> Das Paket entpacken wir mit einem lässigen <code><pre>tar -zvxf chkrootkit.tar.gz</pre></code> Der Quellcode liegt nun in einem neuen Verzeichnis. Wie dieses heisst erfahrt Ihr mit einem <code><pre>ls -l 4096 Feb 2 14:20 chkrootkit-0.47 37791 Feb 2 13:59 chkrootkit.tar.gz</pre></code> Hier sieht man, dass das Verzeichnis chkrootkit-0.47 heißt. Wechselt nun in dieses Verzeichnis: <code><pre>cd chkrootkit-0.47</pre></code> Danach müssen wir noch einen Suchpfad setzen, damit das mit dem Compiler klappt: <code><pre>export PATH=$PATH:/opt/bin:.</pre></code> Jetzt legen wir mit einem <code><pre>make</pre></code> los. Der Vorgang dauert nicht lange. Damit das Programm auch arbeitet brauchen wir noch das netstat Tool: <code><pre>ipkg install net-tools</pre></code> Jetzt können wir das Tool aus dem gleichen Verzeichnis heraus mit <code><pre>./chkrootkit</pre></code> starten. Der Output ist dann denke ich selbsterklärend. Ich weiße darauf hin, dass bei eventuell gefunden Infektionen erstmal geschaut werden muss, welche Datei davon betroffen ist. Da die Software auf der NSLU2 angepasst ist muss das nicht zwangsläufig bedeuten, dass tatsächlich eine Infektion vorliegt, sondern die eine oder andere Datei von der Suchroutine als infiziert markiert wird, weil diese vielleicht vom Standardcode anderer Linuxversionen abweicht (Falschmeldung). Sollte sich aber aber im Laufe der Zeit zusätzlich etwas verändern, dann ist es HÖCHSTE Eisenbahn, sein System vom Netz zu nehmen und auf die Suche zu gehen. '''Zusätzlich:''' Nehmt die Quellcodes wieder von der Platte, damit hier nichts manipuliert werden kann. Das kompilierte Programm könnt Ihr in ein beliebiges Verzeichnis verschieben. c1b8e673f532908f175afdcf8a8c760d68559cc6 CURL Downloader 0 27 36 2009-06-02T21:15:45Z Admin 1 Die Seite wurde neu angelegt: „==Große Downloads mit cURL== Unsere kleine Schnecke eignet sich natürlich auch wunderbar dafür, Daten aus dem Netz zu saugen, auch wenn wir mal nicht an einem...“ wikitext text/x-wiki ==Große Downloads mit cURL== Unsere kleine Schnecke eignet sich natürlich auch wunderbar dafür, Daten aus dem Netz zu saugen, auch wenn wir mal nicht an einem Rechner sitzen. Große Files werden dann einfach über nacht von der kleinen Box selbständig gezogen und das verbraucht natürlich deutlich weniger Strom, als wenn wir das an unserer big Machine erledigen. Gerade ist beispielsweise das neue Debian Etch 4.0 erschienen. Diese Distribution kann man entweder auf über 20 CDs aus dem Netz saugen oder auch wahlweise als eine DVD Ausgabe, die sich über satte drei Scheiben erstreckt und schonmal ein Downloadvolumen von rund 12GB hat. Ein einfaches wget stößt dann schon bei 2GB an seine Grenzen. Dann muss einfach etwas mächtigeres her. Hierfür bietet sich das Kommandozeilen-Tool Curl [http://curl.haxx.se/] an, das auch mehrere Jobs hintereinander erledigen kann. Leider gibt es für die Slug selbst keine fertige Version, sodass wir hier selbst Hand anlegen müssen. Aber auch dies soll uns nicht davor abschrecken, das Tool einzusetzen. Als erstes müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Zuerst modifizieren wir die /etc/profile, damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun saugen wir uns den Quellcode (noch mit wget): <code><pre>wget http://curl.haxx.se/download/curl-7.16.2.tar.gz</pre></code> Nun packen wir den Code aus: <code><pre>tar -zvxf curl-7.16.2.tar.gz</pre></code> Daraufhin entsteht ein neues Verzeichnis in das wir gleich wechseln: <code><pre>cd curl-7.16.2</pre></code> Und schon können wir loslegen: <code><pre>./configure --prefix=/opt</pre></code> Das bereitet uns den Quellcode vor und stellt sicher, dass alle Files in den Standardpfad für neue Anwendungen der NSLU2 landen. Da unsere Schnecke nicht die schnellste ist, kann das durchaus eine Weile dauern, bis das Konfigurationsscript durch ist. Der Kompile wird dann mit einem <code><pre>make</pre></code> angestoßen. Auch das wird sich einwenig hinziehen. Danach installiert Ihr alles mit einem <code><pre>make install</pre></code> Nun können wir uns als root abmelden und melden uns als ein normaler User wieder an. Danach starten wir einen Testdownload, der beispielsweise so aussehen kann: <code><pre>curl -C - -O http://laotzu.acc.umu.se/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso</pre></code> Weitere Links werden einfach mit einem weiteren '''-O''' angehängt, dann arbeitet Curl die Downloads der Reihe nach ab. Jetzt haben wir natürlich noch das Problem, dass beim Ausloggen aus der telnet- oder ssh- Session der curl-Prozess wieder abbricht. Um das zu verhindern, müssen wir den Prozess abkoppeln. Das erledigen wir einfach, indem wir den Befehl '''nohup''' (no hangup) vor unserem curl - Befehl stellen. Allerdings schreibt uns der nohup Befehl den kompletten Statistik- Output in eine Log-Datei (nohup.out). Das macht vielleicht bei Programmen Sinn, bei denen wir auf eine spezielle Anzeige warten (beim Kompilieren oder einen Virenscann etc.) . Bei einer Downloadstatistik bekommen wir mal schnell ein paar MB zusammen, was wir nicht unbedingt haben wollen. Also stellen wir noch hinter den curl- Befehl den Parameter '''--silent''' . Somit sieht der komplette Befehl wie folgt aus: <code><pre>nohup curl -C - -O http://laotzu.acc.umu.se/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso --silent</pre></code> Zum Test können wir uns nach dem Start des Downloads ausloggen und als anderer User (root) einloggen. Dort kontrollieren wir mittels '''htop''' ob der Prozess noch läuft: <div style="float:right;text-align:center;padding-left:20px"> [[Bild:slug11.jpg]] </div> Perfekt! Hier sehen wir, dass curl ganz oben munter werkelt und ordentlich CPU Last verursacht. Das lag allerdings in meinem Beispiel nur daran, dass ich den --silent Mode nicht verwendete und dabei noch kräftig in die Log-Datei geschrieben wurde. Normal benötigt der curl bei solch einer Tätigkeit um die 15% CPU Last. Alternativ kann man natürlich auch den curl zeitgesteuert loslafen lassen. Dazu legt den Befehl (ohne nohup) in ein bash-script und ruft diesen über einen cron-job zur gewünschten Zeit auf. So kann der große Download auch mitten in der Nacht loslegen, wenn ihr die volle Bandbreite Eurer Internet-Verbindung eh nicht benötigt. 82a0851c649131a1fd02a6482ebd7a109cd66de5 Datei:Slug11.jpg 6 28 37 2009-06-02T21:16:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Firefly mp3 Server 0 29 38 2009-06-02T21:19:46Z Admin 1 Die Seite wurde neu angelegt: „==MP3 Server mit Firefly== MP3s im heimischen Netz streamen? Na kein Problem. Mittels dem daap- Server Firefly [http://www.fireflymediaserver.org/] kann Eure MP3...“ wikitext text/x-wiki ==MP3 Server mit Firefly== MP3s im heimischen Netz streamen? Na kein Problem. Mittels dem daap- Server Firefly [http://www.fireflymediaserver.org/] kann Eure MP3 in Eurem Netz verfügbar gemacht werden. Ob am lokalen Rechner, am Laptop via WLan oder mittels dafür geeignete/kompatible Standalonegeräte, die Slug sorgt für genug Futter. Zunächst legt über Eure Webadmin-Konfiguration einen neuen User für Eure Musik an ( mp3 oder musik etc.) . Dieser sollte ausschließlich als Samba Share verwaltet werden und '''keinesfalls''' für einen FTP-Zugriff im Internet freigegeben werden. Sollte von außen auf Eure mp3 Sammlung ein Zugriff möglich sein, dann sind schlimmste Probleme vorprogrammiert! In unserem Beispiel nennen wir ihn musik. Dementsprechend hat er als Heimatverzeichnis das Verzeichnis '''/musik'''. Der Server selbst ist sehr schnell installiert. Hierzu loggt Euch auf Eure Slug ein und führt folgende Befehle zur Installation aus: <code><pre>ipkg update ipkg install mt-daapd</pre></code> Nun müssen wir die Konfigurationsdatei editieren: <code><pre>vi /opt/etc/mt-daapd/mt-daapd.conf</pre></code> Folgende Zeilen sind interessant: <code><pre>[...] port 3689 (Standard, kann geändert werden, muss aber nicht) [...] admin_pw beliebiges Administratorpasswort (WICHTIG!) [...] mp3_dir /musik (Das Verzeichnis für die Musikdateien) [...]</pre></code> Das war es im Grunde auch schon. Speichert Eure Änderung ab und startet den Server neu: <code><pre>/opt/etc/init.d/S60mt-daapd</pre></code> Wenn Ihr eine Logdatei mitlaufen lassen wollt müsst Ihr hierfür wieder die Konfig bearbeiten: <code><pre>vi /opt/etc/mt-daapd/mt-daapd.conf</pre></code> Ändert die Zeile <code><pre># logfile /var/log/mt-daapd.log</pre></code> in <code><pre>logfile /var/log/mt-daapd.log</pre></code> um. Legt dann noch eine leere Logdatei an: <code><pre>touch /var/log/mt-daapd.log</pre></code> Auch für diese Änderung muss der Server neu gestartet werden: <code><pre>/opt/etc/init.d/S60mt-daapd</pre></code> Die Logdatei könnt Ihr Euch dann an der Konsole mittels <code><pre>tail -f /var/log/mt-daapd.log</pre></code> ansehen. Ladet nun eine Test-mp3 auf Euer Musikverzeichnis und startet den Webadmin (mit dem in Eurer Config festgelegtem Port) in Eurem Webbrowser: <code><pre>http://[IP-Nummer der Slug]:3689</pre></code> Meldet Euch dann mit dem Usernamen admin mit Eurem Passwort an Klickt nun auf "'''status'''" : [[Bild:slug12.png|center]] Klickt dann auf Start Scan, damit Eure Dateien eingelesen werden. Kurz darauf sollte die Anzahl der auf dem Server geladenen Dateien angezeigt werden. Mittels einem geigneten Programm (iTunes, Amarok um nur zwei zu nennen) können nun die Musikdateien abgespielt werden. <br /> <br /> <br /> ===Hier ein kurzes Beispiel, wie der Amarok unter Linux dafür konfiguriert wird=== Startet dazu Euren Amarok [http://amarok.kde.org/de]: [[Bild:slug13.png|center]] Dann klickt auf "'''Einstellungen -> Amarok einrichten ...'''" Dann links auf "'''Media-Player'''" und "'''Gerät hinzufügen'''". Im Dropdownmenü wählt Ihr Musikfreigabe aus und vergebt einen beliebigen Namen: [[Bild:slug14.png|center]] Ihr beendet das kleine Menü mit '''OK''' und schließt das Konfigurationsfenster mit "'''Anwenden'''". Danach könnt Ihr im Dropdownmenü oben links das Gerät "'''Freigegebene Musik'''" auswählen und klickt auf den kleinen Pfeil rechts neben den Buttons Verbinden/Trennen (rot markiert): [[Bild:slug15.png|center]] Nun müsst Ihr die IP Eures Rechners im Netz mit dem DAAP Server eingeben. Den Port stellt falls nötig gemäß Eurer Serverkonfiguration ein: [[Bild:slug16.png|center]] Das dann auch mit '''OK''' beenden. Klickt nun auf '''Verbinden'''. Danach solltet in der Liste darunter Euer Server auftauchen (IP) und Eure MP3s gelistet werden. Jetzt könnt Ihr anfangen, Eure Musikauswahl zu starten. a7f1f8b5adbb9ccc27e21fff5eea617cf5038b15 Datei:Slug12.png 6 30 39 2009-06-02T21:20:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug13.png 6 31 40 2009-06-02T21:20:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug14.png 6 32 41 2009-06-02T21:21:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug15.png 6 33 42 2009-06-02T21:22:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug16.png 6 34 43 2009-06-02T21:23:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Firewalling 0 35 44 2009-06-02T21:26:46Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Firewall mit Fail2ban== Wer im Netz einen Webserver betreibt, der wird sich immer wieder Attacken gegen seinen Server ausgesetzt fühlen. Das sind nicht oft gezielte Angriffe, sondern eher Suchmachanismen, die an diversen Standardports herausfinden, ob diverse Dienste wie http oder ssh freigegeben sind. An solchen freigegeben Ports werden dann entsprechende Einbruchsversuche gestartet. Dies geschieht über verschiedene Wege. Die einfachste aber am häufigsten verwendete Methode ist der sogenannte Brute Force Angriff. Hier versucht der Angreifer mittels vorgefertigter Passwortlisten das korrekte Passwort zu erraten. Dabei werden anhand dieser Liste Logins solange probiert, bis das passende Passwort gefunden ist. Ähnliches kann natürlich auch am FTP Server passieren. Dieses Tutorial soll nun eine Möglichkeit aufzeichnen, solchen Brut Force Attacken zu begegnen und zusätzlich die NSLU2 über ein Firewall-Script soweit abzudichten, bis eben auf die für die NSLU2 benötigten Ports. Das Tutorial soll allerdings keinesfalls eine falsche Sicherheit vorgaukeln. Eine Firewall und eine IP Falle, wie wir sie im nachfolgenden Text über das Programm Fail2Ban realisieren werden kann nur eine gewisse Sicherheit bieten. Wichtig ist zudem weiterhin, seine Log-Dateien regelmäßig im Auge zu behalten und auch zu kontrollieren, welche Dateien sich auf der Büchse befinden. Bekommen die Dateien ungebetenen Zuwachs, dann ist wohl der ftp-Server geknackt worden. Das von mir verfasste Tutorial fasst einige Arbeitsschritte zusammen, die für sich betrachtet auch noch ausbaufähig sind. Aufgrund der Komplexität des Themas kann dies auch nicht wirklich vollständig sein und stellt in dieser Hinsicht eine Art Grundgerüst dar, auf dass freilich weiter aufgebaut werden kann. Da das Konfigurieren einer Firewall nicht wirklich trivial ist sei noch gesagt: Bevor Ihr irgendwelche Scripte automatisiert, startet diese IMMER erst manuell und testet die Funktionalität der Scripte. Sperrt Ihr Euch aus Versehen durch eine Falschkonfiguration aus und die Scripte werden nach einem Reboot automatisch gestartet, weil diese bereits in den Initscripten integriert wurden habt Ihr wenig bis gar keine Chance mehr, auf Eure Büchse zu kommen. Hier muss das Gerät dann wieder mit einer frischen Firmware geflasht werden und Ihr könnt das Gerät wieder von vorne neu einrichten. Ziel dieses Tutorials ist es nun, eine IP Falle mit dem Programm Fail2Ban [http://www.fail2ban.org/wiki/index.php/Main_Page] zu installieren. Mittels dieser "Falle" können Loginversuche limitiert werden. IP-Nummern über die nun versucht wird, ein Passwort zu erraten, werden nach einer vordefinierten Anzahl von Fehlversuchen einfach gesperrt. Die Sperre wird dann nach einer gewissen Zeit wieder aufgehoben. Hierbei empfiehlt sich eine Sperre von mehreren Tagen, damit der Versuch, einen Einbruch über eine Passwortliste zu unternehmen ad Absurdum führt. Zudem sollen Einbruchsversuche uns per E-Mail gemeldet werden. Zum Schluss wollen wir noch eine Firewall für die restlichen Ports unseres Servers einrichten. Also lest alles in Ruhe durch, nehmt Euch Zeit für Euer Projekt, dann werdet Ihr denke ich auch eine Menge Spaß dabei haben! <br /> <br /> <br /> ==Basis Pakete installieren== Zuerst sollten wir - falls nicht schon aufgrund meiner vorangegangenen Tutorials geschehen - die NSLU2 durch die Entwicklerpakete ergänzen, damit wir bei Bedarf etwas kompilieren können: <code><pre>ipkg install optware-devel ipkg install python python24</pre></code> Danach modifizieren wir die /etc/profile, damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. <br /> <br /> <br /> ==Syslog ändern== Damit wir ein paar mehr wichtige Informationen wie eben auch die Sicherheitsmeldungen des openssh Servers geliefert bekommen, müssen wir den bisherigen Syslog Dämonen durch einen anderen ersetzen. Dies ist schnell erledigt! Zuerst das neue Syslogpaket installieren <code><pre>ipkg install syslog-ng</pre></code> Danach in '''/etc/inittab''' folgende Zeilen auskommentieren: <code><pre># slog:unknown:/sbin/syslogd -n # klog:unknown:/sbin/klogd -n</pre></code> Alte Logdaemons abschießen: <code><pre>killall syslogd killall klogdSyslog</pre></code> dann mit <code><pre>/opt/etc/init.d/S01syslog-ng</pre></code> starten. Beim nächsten Reboot wird das Programm automatisch gestartet. Damit die Logdateien nicht auf Dauer zu groß werden und eventuell gerade bei der Verwendung von etwas knapp bemessenen USB-Sticks zu vollen Datenspeichern zu führen, empfehle ich die Verwendung des logrotate. Dieser sorgt dafür, dass die schnell wachsenden System-Logs in separaten gepackten Dateien gespeichert werden und die aktuelle Log-Datei heruntergekürzt werden. Dies geschieht rotierend, d.h. die gepackten Dateien werden durchnummeriert und die älteste jeweils gelöscht. Hierzu installiert bitte den logrotate mit folgendem Befehl: <code><pre>ipkg install logrotate</pre></code> Jetzt editiert die '''/opt/etc/logrotate.conf''' mit dem <code><pre>vi /opt/etc/logrotate.conf</pre></code> und ändert diese wie folgt ab: <code><pre>compress /opt/var/log/messages opt/var/log/syslog opt/var/log/kern.log opt/var/log/debug { rotate 5 postrotate /bin/killall syslogd /bin/killall klogd /bin/killall -HUP syslog-ng endscript } include /opt/etc/logrotate.d</pre></code> rotate 5 bedeutet, dass Ihr 5 Sicherungen bekommt, bis die älteste bei der 6. Sicherung gelöscht wird. Damit das auch automatisiert funktioniert, editiert Eure crontab: <code><pre>vi /etc/crontab</pre></code> und fügt folgende Zeile ein: <code><pre>30 23 * * 6 root /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null</pre></code> Das löst jeden Samstag um 23:30 Uhr eine Bereinigung der Logfiles aus. Somit habt Ihr die Files zumindest 5 Wochen zur Verfügung, solltet Ihr irgendwelchen Unregelmäßigkeiten auf die Spur kommen wollen. Die gepackten Dateien befinden sich dann unter '''/opt/var/log''' und können mit dem Midnight Commander beispielsweise eingesehen werden. <br /> <br /> <br /> ==Iptables / Firewall installieren== Bevor wir uns nun an das Eingemachte machen können, müssen wir noch diverse Kernelmodule nachinstallieren. Dann kommen die iptables dran, mit denen wir im weiteren Verlauf des Tutorials noch viel Freude haben werden. Folgende 4 Pakete werden nun installiert: <code><pre>ipkg install kernel-module-ip-tables -force-depends ipkg install kernel-module-iptable-filter -force-depends ipkg install kernel-module-ipt-log ipkg install iptables</pre></code> Startet nun sicherheitshalber Eure Slug neu, damit alles sauber initialisiert wird. <br /> <br /> <br /> ==Erweiterung der Firewall mit IPTABLES== Wer seine Slug noch weiter abdichten möchte, der kann hier mit einem sehr guten Script arbeiten, dass man auf der NSLU2-Linux.org findet. Dieses fügt weitere Regeln hinzu und sperrt die Ports. Wobei Standarddienste wie der ftp und der http Server offen bleiben. Sollen weitere Ports geöffnet werden, so muss das in dem folgenden Script hinterlegt werden. Jetzt ein Firewallscript anlegen: <code><pre>touch /opt/etc/iptables.sh</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /opt/etc/iptables.sh</pre></code> Dann füllen wir den Inhalt mit folgender ausgezeichneten Firewallregel, welches ich auf der nslu2-linux.org gefunden habe (Link folgt nach dem Script): <code><pre>#!/bin/sh ############################################################################### # # Local Settings # # IPTables Location - adjust if needed IPT="/opt/sbin/iptables" IPTS="/opt/sbin/iptables-save" IPTR="/opt/sbin/iptables-restore" # Internet Interface INET_IFACE="ixp0" # Path to iptables modules IPT_MODPATH="/lib/modules/2.4.22-xfs/kernel/net/ipv4/netfilter" # CHANGE THIS TO MATCH YOUR SLUG IP ADDRESS # currently not used INET_ADDRESS="10.0.0.123" # Localhost Interface LO_IFACE="lo" LO_IP="127.0.0.1" # Save and Restore arguments handled here if [ "$1" = "save" ] then echo -n "Saving firewall to /etc/sysconfig/iptables ... " $IPTS > /opt/etc/iptables echo "done" exit 0 elif [ "$1" = "restore" ] then echo -n "Restoring firewall from /etc/sysconfig/iptables ... " $IPTR < /opt/etc/iptables echo "done" exit 0 fi # Load Modules echo "Loading kernel modules ..." insmod $IPT_MODPATH/ip_tables.o insmod $IPT_MODPATH/iptable_filter.o # if you need logging, uncomment line above # (be aware you have installed the kernel-module-ipt-log #insmod $IPT_MODPATH/ipt_LOG.o # Flush Any Existing Rules or Chains echo "Flushing Tables ..." # Reset Default Policies $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT # Flush all rules $IPT -F # Erase all non-default chains $IPT -X if [ "$1" = "stop" ] then echo "Firewall completely flushed! Now running with no firewall." exit 0 fi ############################################################################### # Rules Configuration # Filter Table # Set Policies $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP # User-Specified Chains echo "Create and populate custom rule chains ..." # Create a chain to filter INVALID packets $IPT -N bad_packets # Create another chain to filter bad tcp packets $IPT -N bad_tcp_packets # Create separate chains for icmp, tcp (incoming and outgoing), # and incoming udp packets. $IPT -N icmp_packets # Used for UDP packets inbound from the Internet $IPT -N udp_inbound # Used to block outbound UDP services from internal network # Default to allow all $IPT -N udp_outbound # Used to allow inbound services if desired # Default fail except for established sessions $IPT -N tcp_inbound # Used to block outbound services from internal network # Default to allow all $IPT -N tcp_outbound # Populate User Chains # bad_packets chain # Drop INVALID packets immediately # needs conntrack #$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP # Then check the tcp packets for additional problems $IPT -A bad_packets -p tcp -j bad_tcp_packets # All good, so return $IPT -A bad_packets -p ALL -j RETURN # bad_tcp_packets chain # # All tcp packets will traverse this chain. # Every new connection attempt should begin with # a syn packet. If it doesn't, it is likely a # port scan. This drops packets in state # NEW that are not flagged as syn packets. # needs conntrack #$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \ #--log-prefix "New not syn: " #$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP # Stealth scans $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # All good, so return $IPT -A bad_tcp_packets -p tcp -j RETURN # icmp_packets chain # ICMP packets should fit in a Layer 2 frame, thus they should # never be fragmented. Fragmented ICMP packets are a typical sign # of a denial of service attack. #$IPT -A icmp_packets --fragment -p ICMP -j LOG \ #--log-prefix "ICMP Fragment: " $IPT -A icmp_packets --fragment -p ICMP -j DROP # Echo - uncomment to allow your system to be pinged. # Uncomment the LOG command if you also want to log PING attempts # # $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG \ # --log-prefix "Ping detected: " $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT # comment out above and uncomment below to drop pings without logging. #$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP # see ping reply packets $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT # Time Exceeded $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # Not matched, so return so it will be logged $IPT -A icmp_packets -p ICMP -j RETURN # TCP & UDP # Identify ports at: # http://www.chebucto.ns.ca/~rakerman/port-table.html # http://www.iana.org/assignments/port-numbers # # ADD UDP-based services here # # udp_inbound chain # ports you want to accept udp packets on # netbios/samba $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j ACCEPT # Network Time Protocol (NTP) Server $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT # External DHCP Server # Allow DHCP client request packets inbound from external network $IPT -A udp_inbound -p UDP -s 0/0 --source-port 68 --destination-port 67 -j ACCEPT # DNS in #$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT $IPT -A udp_inbound -p UDP -s 0/0 --source-port 53 -j ACCEPT # Not matched, so return for logging $IPT -A udp_inbound -p UDP -j RETURN # udp_outbound chain # ports you send udp packets to # netbios/samba $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 138 -j ACCEPT # Network Time Protocol (NTP) Server $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT # DHCP out $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 68 -j ACCEPT # DNS out $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT # No match, so ACCEPT # make this DROP if you want to block any other outbound udp traffic $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT # tcp_inbound chain # # This chain is used to allow inbound connections to the SLUG # smb $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 139 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 445 -j ACCEPT # HTTP $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT # FTP $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port ftp -j ACCEPT # Passive $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 33201:33210 -j ACCEPT # DNS $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT # sshd $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT # telnet $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 23 -j ACCEPT # Not matched, so return so it will be logged $IPT -A tcp_inbound -p TCP -j RETURN # tcp_outbound chain # # This chain controlls what tcp traffic is allowed out # http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT # DNS $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT # sshd $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT # No match, so ACCEPT # Note, you could make this DROP to block any other outbound traffic $IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT ############################################################################### # INPUT Chain echo "process INPUT chain ..." # Allow all on localhost interface $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT # Drop bad packets $IPT -A INPUT -p ALL -j bad_packets # ****************************** # Inbound Internet Packet Rules # Accept Established Connections # Needs conntrack module # $IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # packet filter accepts inbound packets that are replies to an outbound connection # use until conntrack is available # this blocks all new connection attempts except to those allowed below $IPT -A INPUT -p TCP -i $INET_IFACE ! --syn -j ACCEPT # Route the rest to the appropriate user chain $IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound $IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound $IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets # Drop without logging broadcasts that get this far. # Comment this line if testing new rules that impact # broadcast protocols. #$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP ############################################################################### # # OUTPUT Chain # echo "Process OUTPUT chain ..." # Generally trust the firewall on output # However, invalid icmp packets need to be dropped # to prevent a possible exploit. # needs conntrack #$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP # Localhost $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT # If you want to block outbound connections, uncomment first section below, comment # out second section, and add rules to tcp_outbound/udp_outbound # To internet - filtered #$IPT -A OUTPUT -p TCP -o $INET_IFACE -j tcp_outbound #$IPT -A OUTPUT -p UDP -o $INET_IFACE -j udp_outbound # To internet (unfiltered) $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT</pre></code> ( Das Script und einen Download findet Ihr unter folgender Adresse NSLU2-Linux - HowTo / EnableFirewall [http://www.nslu2-linux.org/wiki/HowTo/EnableFirewall] ) Gestartet wird die Firewall mit <code><pre>/opt/etc/iptables.sh</pre></code> Anhalten mit <code><pre>/opt/etc/iptables.sh stop</pre></code> Um die Firewall bei jedem Start automatisch zu aktivieren müssen wir einen Link anlegen: <code><pre>ln -s /opt/etc/iptables.sh /opt/etc/init.d/S30iptables</pre></code> Ihr werdet hier jetzt bemerken, dass z.B. Euer Webadmin geblockt ist, weil dieser nicht auf dem Port 80 liegt, sondern einem anderen, den Ihr bereits in der Vergangenheit zugewiesen habt. Um nun den http auch für einen zweiten Port freizugeben ergänzt das Script durch zwei neue Regeln, die Ihr am besten unter die bisherige Port 80 Regel setzt. Sucht dazu folgende Zeilen im Script: <code><pre># http $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT</pre></code> Diese erweitert Ihr folgendermaßen, wenn Ihr Eurem Webadmin z.B. den Port 9055 zugewiesen habt: <code><pre># http $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 9055 -j ACCEPT</pre></code> Das gleiche für den Outbound: <code><pre># http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT</pre></code> in <code><pre># http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 9055 -j ACCEPT</pre></code> Wenn Ihr z.B. den Firefly MP3 Server installiert habt, dann benötigt dieser auch einen freien Port auf 3689 beispielsweise (je nachdem, wie Ihr ihn konfiguriert habt). Gebt diesen Port frei, indem Ihr direkt bei den Portfreigaben im Script folgende Zeilen ergänzt: <code><pre># MT-DAAP $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 3689 -j ACCEPT $IPT -A INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT $IPT -A OUTPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT</pre></code> Die IP 224.0.0.251 ist eine Multicast-Adresse, die hier Apples i-Tunes zum Rendezvous auf dem Port 5353 benötigt. Wird dieser geblockt findet der i-Tunes den NSLU2 Firefly Media Server nicht mehr im Netz. Zum Schluss muss noch die '''/opt/etc/vsftpd.conf''' editiert werden, damit der passive Modus des vsftp FTP Server funktioniert und eine Verbindung wieder möglich wird. Ergänzt nun am Ende der '''vsftp.conf''' folgende Zeilen: <code><pre># for our firewall, only use this range of ports pasv_min_port=33201 pasv_max_port=33210</pre></code> <br /> <br /> <br /> ==Fail2ban installieren und konfigurieren== Zuerst benötigen wir ein Arbeitsverzeichnis. Das legen wir in dem Rootverzeichnis an: <code><pre>mkdir work</pre></code> Dann wechseln wir nach work <code><pre>cd /work</pre></code> Danach laden wir uns Fail2ban herunter: <code><pre>wget http://downloads.sourceforge.net/fail2ban/fail2ban-0.8.3.tar.bz2?modtime=1216338691&big_mirror=0</pre></code> Nun entpacken wir das Programm: <code><pre>tar xvfj fail2ban-0.8.3.tar.bz2</pre></code> Das erstellt uns ein neues Verzeichnis fail2ban-0.8.3 . Hier wechseln wir hinein: <code><pre>cd fail2ban-0.8.3</pre></code> Das wird dann mit <code><pre>python2.4 setup.py install</pre></code> installinstalliert. Die wichtigen Dateien: Die ausführbare Datei '''fail2ban-client''' liegt unter '''/opt/local/bin''' . Die dazugehörige Konfigurationsdatei '''jail.conf''' ist dann unter '''/etc/fail2ban''' zu finden, die dann noch editiert werden muss. Öffnet nun die /etc/fail2ban/jail.conf und sucht nach folgender Sektion, um den ssh einzustellen: <code><pre>[ssh-iptables] enabled = false filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /var/log/sshd.log maxretry = 5</pre></code> Ich habe die z.B. wie folgt eingestellt: <code><pre>[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /opt/var/log/auth.log maxretry = 3 bantime = 3600</pre></code> Das bedeutet hier, dass beim Versuch via ssh sich einzuwählen beim dritten falschen Login ( maxretry = 3) die IP für eine Stunde ( bantime = 3600 ; wird in Sekunden angegeben) gesperrt ist. Das kann man natürlich je nach Gusto anpassen. Vergesst nicht, das '''enabled = false''' auf '''true''' umzustellen, damit der Dienst hier aktiviert wird. Das Gleiche dann für unseren FTP Server (vsftp): <code><pre>[vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] mail-whois[name=VSFTPD, dest=yourmail@mail.com] logpath = /opt/var/log/vsftpd.log maxretry = 5 bantime = 600</pre></code> in <code><pre>[vsftpd-iptables] enabled = true filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] mail-whois[name=VSFTPD, dest=yourmail@mail.com] logpath = /opt/var/log/vsftpd.log maxretry = 5 bantime = 3600</pre></code> Hier erhöhen wir die Sperrdauer auf 1 Stunde und aktivieren den Dienst mit '''enable = true''' . Speichert die Änderungen und startet nun den fail2ban indem Ihr zuerst mit <code><pre>cd /opt/local/bin</pre></code> in das korrekte Verzeichnis wechselt und dann <code><pre>./fail2ban-client start</pre></code> eingebt. Nach erfolgreichen Start seht Ihr folgende Message: '''2007-05-04 00:35:59,100 fail2ban.server : INFO Starting Fail2ban''' Um zu sehen, ob auch die Dienste soweit online sind, setzt folgenden Befehl ab: <code><pre>/opt/local/bin/fail2ban-client status</pre></code> Der Output sollte folgender sein: '''Status |- Number of jail: 2 `- Jail list: ssh-iptables, vsftpd-iptables''' Jetzt checken wir noch die IP Tables ob hier die korrekten Eintragungen vom fail2ban vorgenommen wurden: <code><pre>iptables -L -v</pre></code> Überprüft die Zeilen nun nach folgendem Output: '''0 0 fail2ban-VSFTPD tcp -- any any anywhere anywhere tcp dpt:ftp 181 16496 fail2ban-SSH tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT all -- lo any anywhere anywhere''' Jetzt ist alles roger. Lasst Euch nun die Logfile des fail2ban anzeigen: <code><pre>tail -f /var/log/fail2ban.log</pre></code> Versucht Euch nun mit einem FTP Client einzuwählen und gebt bewusst ein falsches Passwort ein. Wenn Alles gut läuft, bekommt der FTP Client nach dem 5. Versuch keinen Connect mehr. Die Logdatei zeigt dann folgende Zeile: <code><pre>2007-05-04 00:45:27,847 fail2ban.actions: WARNING [vsftpd-iptables] Ban 192.168.0.2 2007-05-04 00:45:28,775 fail2ban.actions.action: ERROR echo -en "Hi,\n The IP 192.168.0.2 has just been banned by Fail2Ban after 5 attempts against VSFTPD.\n\n Here are more information about 192.168.0.2:\n `whois 192.168.0.2`\n Regards,\n Fail2Ban"|mail -s "[Fail2Ban] VSFTPD: banned 192.168.0.2" yourmail@mail.com returned 7f00</pre></code> Hier seht Ihr, dass die IP gesperrt wurde. Wenn Ihr das ausprobiert solltet Ihr vorher vielleicht erstmal die Bandauer auf 60 Sekunden stellen, damit Ihr nicht ewig warten müsst, bis Ihr ge-unbant werdet: <code><pre>2007-05-04 00:46:28,196 fail2ban.actions: WARNING [vsftpd-iptables] Unban 192.168.0.2</pre></code> Natürlich kann man auch, um sich selbst nicht aus Versehen auszusperren, seine eigene IP aus der Überwachung herausnehmen und in der '''/etc/fail2ban/jail.conf''' in die Zeile '''ignoreip''' eintragen. Damit unser Filter auch beim nächsten Boot automatisch startet legen wir jetzt ersteinmal ein Script an: <code><pre>vi /opt/bin/iptrap</pre></code> Das füllen wir mit folgendem Script, das ich einmal kurz zusammengeschrieben habe: <code><pre>#!/bin/bash # Bootscript fuer den fail2ban Client case "$1" in start) rm /tmp/fail2ban.sock rm /var/run/fail2ban/fail2ban.sock echo "Starting IP Trap..." exec /opt/local/bin/fail2ban-client start ;; stop) echo "Stopping IP Trap... leaving machine wide open now ..." exec /opt/local/bin/fail2ban-client stop ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac</pre></code> Damit diese ausführbar ist, fügen wir das Executable Flag dazu: <code><pre>chmod +x /opt/bin/iptrap</pre></code> Diese kommt nun zu unseren init-Scripten: <code><pre>ln -s /opt/bin/iptrap /opt/etc/init.d/S35iptrap</pre></code> Jetzt können wir die Kiste neu starten und hoffen, dass wir ein Stückchen sicherer geworden sind: <code><pre>sync reboot</pre></code> <br /> <br /> <br /> ==Meldung per E-Mail== Damit wir nicht immer regelmäßig die Log-Datei nach Sperrungen durchsuchen zu müssen, gibt es einen sehr komfortablen Weg, sich die Sperrungen per E-Mail zusenden zu lassen. Dabei ist es sogar möglich, gleich eine '''whois''' Abfrage zu starten und das Ergebnis in die Mail zu schreiben. Hierzu muss der Mailer '''nail''' und whois installiert werden: <code><pre>ipkg install nail ipkg install whois</pre></code> Danach verknüpfen wir das Programm nail mit dem Programmaufruf mail, weil die ganzen Scripte ein "mail" anstatt "nail" erwarten: <code><pre>ln -s /opt/bin/nail /opt/bin/mail</pre></code> Jetzt müssen wir noch unseren smtp Server und Absender festlegen. Dazu müssen wir unter dem Heimatverzeichnis von /root die Datei .mailrc anlegen. Am besten mit vi aufmachen: <code><pre>vi .mailrc</pre></code> und folgende Zeilen eingeben (entsprechend Euren Server/Absender abändern): '''set smtp=smtp. euerserver. de'''<br /> '''set from=meine @mail. blah''' Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen: '''set smtp-auth-user=Loginname'''<br /> '''set smtp-auth-password=Passwort''' Da hier das Passwort in klar lesbarer Form in der '''.mailrc''' hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben. Nun müssen wir noch Eure Empfängeradresse festlegen und diverse Einstellungen vornehmen. Hierzu öffnet wieder die '''/etc/fail2ban/jail.conf''' und ändert in jedem Abschnitt, den Ihr auf "'''true'''" gesetzt habt die Platzhalter Adresse '''dest=yourmail @mail. com''' entsprechend Eurer gewünschten Empfängeradresse um. Ebenso schreibt das '''sendmail-whois''' in '''mail-whois''' um. Dann fügt noch folgende Zeilen unter die Zeile '''findtime = 600''' ein: <code><pre>mta = mail action = %(action_mwl)s</pre></code> Seit fail2ban 0.8.x wurden die Scripte von mail auf sendmail umgestellt. Das machen wir mit obigen Eintrag rückgängig. Zudem legen wir mit action fest, dass eine komplette whois Auskunft über den Angreifer gezogen wird. Stoppt nun Eure Firewall und startet diese wieder neu, damit die Änderungen übernommen werden. Wenn alles richtig konfiguriert ist bekommt Ihr nun gleich die erste Mail, dass der Fail2ban Dienst gestartet wurde. Wenn Ihr Eure IP-Falle allerdings beim Systemstart automatisch hochfahren lasst, kann es sein, dass Ihr keine E-Mails erhaltet. Das liegt daran, dass nicht der User "root" den Dienst startet, sondern das System selbst. Um dennoch auch beim automatischen Start die Mails zu bekommen fügt die SMTP Daten einfach in die '''/opt/etc/nail.rc''' ein, damit diese als Standardeinstellungen übernommen werden. Wenn Ihr die Slug nun neu startet sollte dann nach erfolgreichem Bootup die Meldung in Eurem Postfach landen, dass die IP Falle nun scharf ist: <code><pre>Hi, The jail SSH has been started successfuly. Regards, Fail2Ban</pre></code> An der Stelle komme ich nun zum Ende meines Vorschlages, die NSLU2 im Netz einwenig sicherer zu machen. Dennoch vergesst nie, wie ich es bereits eingangs schon erwähnte, die Augen offen zu halten und Eure Log-Dateien regelmäßig zu kontrollieren! <br /> <br /> <br /> d3ac7ab151658799663ed4082e822ecdf22885c8 Backupmaschine 0 36 45 2009-06-02T21:29:16Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Die Slug als intelligente Backupmaschine== Um ein Sicherungskonzept macht man sich in der Regel dann erst Gedanken, wenn es einmal zum Datengau gekommen ist. Dank unserer kleinen NSLU2 muss es aber hier nicht erst soweit kommen. Als Beispiel haben wir einen Windowsrechner (wir verwenden in diesem Tutorial ein Vista) im Netz, auf dem wir ein Verzeichnis haben, das unsere ganzen wichtigen Dokumente beinhaltet. Wir möchten jetzt, dass dieses Verzeichnis in regelmäßigen Abständen auf die Slug kopiert wird und zudem noch alte Sicherungen für eine gewisse Zeit aufgehoben werden, die wir bei Bedarf wieder heranziehen können, wenn etwas zu voreilig gelöscht wurde. Zu jeder Zeit soll aber über das Netzwerk auf unsere letzte Sicherung zugegriffen werden können, ohne dass wir großmächtig ein Backup wiederherstellen müssen. Achso... natürlich soll das vollautomatisch gehen, ohne dass wir da auf unsere Slug zugreifen müssen. Da wir aber auch nicht ständig die Logfiles der Slug ansehen wollen, soll uns die NSLU2 noch selbstständig E-Mails schicken, wenn gerade ein Backup gemacht wird und wenn es erfolgreich verlaufen ist. Das alles kann die Slug? Aber natürlich! Die richtigen Programme vorausgesetzt und ein kleines Script, dass ich für diesen Zweck geschrieben habe. <br /> <br /> <br /> ==Vorbereitungen auf unseren Windows Rechner== <div style="float:right;text-align:center;padding-left:20px"> [[Bild:slug20.png]] </div> Damit die NSLU2 später auf unseren Windowsrechner zugreifen kann benötigen wir ein eigenes Benutzerkonto mit Passwort. Legt das auf Eurem Windowsrechner an, falls nicht schon vorhanden. Ihr solltet hierfür nicht das Administratorenkonto verwenden, sondern nur ein eigenen User. Ich habe diesen in unserem Beispiel "backup" genannt. Auch bekommt er das Passwort "backup". Ihr werdet sicherlich ein etwas sicherers Passwort auswählen, aber für unser Beispiel genügt dieses erstmal. Gebt nun das gewünschte Sicherungsverzeichnis frei. Es können natürlich auch mehrere Verzeichnisse verwendet werden, dazu muss aber später unser Script einwenig angepasst werden. Zur Demonstartion des Sicherungskonzeptes genügt erstmal ein Verzeichnis. Öffnet zuerst den Windows Dateimanager "Explorer" indem Ihr auf das Startsymbol rechts klickt und "Explorer" auswählt: Klickt nun mit rechts auf das zu freigebende Verzeichnis und dort auf "Freigabe..." : [[Bild:slug21.png|center]] Wählt nun das Konto aus, das eine Freigabe für das Verzeichnis erhält: [[Bild:slug22.png|center]] Klickt dann auf "'''Hinzufügen'''" : [[Bild:slug23.png|center]] Wenn Ihr mögt könnt Ihr noch die Art der Freigabe von "Leser" auf "Mitbesitzer" ändern. Das ist allerdings optional, denn zum Sichern müssen wir nur lesen können: [[Bild:slug24.png|center]] Danach kommt noch eine Sicherheitsabfrage. Seid Ihr zu dem Zeitpunkt kein Administrator, werdet Ihr noch nach dem Admin-Passwort gefragt: [[Bild:slug25.png|center]] Danach noch kurz eine Statusanzeige, dass das Verzeichnis nun freigegeben ist: [[Bild:slug26.png|center]] Damit steht schonmal Euer Windows Share. Nun legen wir noch eine neue Datei direkt in das freigebene Verzeichnis an. Diese ist notwendig, damit unser Sicherungsscript später dieses Verzeichnis auch als Sicherungsverzeichnis akzeptiert. Legt dazu ein neues Textdokument an: [[Bild:slug27.png|center]] Benennt diese Datei in "'''sichern'''" um. Die Endung sollte '''.txt''' sein. Also '''sichern.txt'''. [[Bild:slug28.png|center]] Der Hintergrund hierzu ist, dass Ihr auf die Art und Weise ganz einfach ein Backup stoppen könnt, ohne das Script selbst auf der Slug anhalten zu müssen. Benennt die sichern.txt um oder löscht diese, dann wird das Verzeichnis solange nicht gesichert, bis Ihr wieder die sichern.text in dieses Verzeichnis packt. Wenn Ihr soweit alles vorbereitet habt, dann können wir uns an die Slug machen. <br /> <br /> <br /> ==Vorbereitungen auf der Slug== Meldet Euch auf der slug an und installiert (falls noch nicht geschehen) folgende Pakete: nail (Mailprogramm für die Konsole)<br /> coreutils (diverse Tools für die Kommandozeile)<br /> rsync (Backupprogramm)<br /> <code><pre>ipkg install coreutils nail rsync</pre></code> Solltet Ihr diesen Schritt vergessen, wird das das Script für Euch erledigen. Ebenso muss noch eine log-Datei angelegt werden: <code><pre>touch /var/log/backup</pre></code> Damit nun uns die NSLU2 auch Messages schicken kann, muss noch der nail konfiguriert werden. Öffnet hierfür die '''/opt/etc/nail.rc''' mit einem Editor (vi z.B.) und ergänzt folgende Zeilen am Ende der Datei (entsprechend Euren Server/Absender abändern): '''set smtp=smtp. euerserver. de'''<br /> '''set from=meine @mail. blah'''<br /> Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen: '''set smtp-auth-user=Loginname'''<br /> '''set smtp-auth-password=Passwort'''<br /> Da hier das Passwort in klar lesbarer Form in der .mailrc hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben. Zur Sicherung selbst legt Euch auf der Slug einen neuen User an, der ein eigenes Verzeichnis bekommt. Diesen nennen wir z.B. auch '''backup''' und der hat das Verzeichnis '''/backup'''. Dorthin wollen wir die Sicherungen schreiben und können auch später über diesen User auf die Sicherungen zugreifen. Das war's dann auch schon mit der Vorarbeit. Kommen wir zum eigentlichen Script... <br /> <br /> <br /> ==Das Backupscript== Legt nun das Backupsript in ein Verzeichnis an. Ihr könnt dies z.B. in das Verzeichnis '''/opt/bin''' kopieren. Hier das Listing meiner '''backup.sh''' backup.sh <code><pre>#!/bin/sh # Backupscript fuer die NSLU2 -- ROTIEREND -- # Gargi 2007 # getestet auf unslung 6.8 beta !!!! # Das Script funktioniert nur mit den installierten nail, coreutilis und rsync: # ipkg install coreutils rsync nail # Bitte noch eine logdatei anlegen: # touch /var/log/backup # KONFIGURATIONSBEREICH ######################## ip=192.168.1.3 # Die IP des zu scannenden Rechner verzeichnis=transfer # Das zu sichernde freigegebene Verzeichnis # Weitere Verzeichnisse koennen ergaenzt werden # verzeichnis2=xyz loginname=backup # Loginname auf den zu sichernden Rechner loginpassword=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann btarget=backup # Zielverzeichnis der Backups auf der Slug intervall=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen mailadresse=mein @ mailadresse.de # Deine E-Mailadresse # ENDE DES KONFIGURATIONSBEREICHES########## # Stelle fest, ob bereits ein Sync laeuft um ressourcen zu schonen if [ -f /tmp/backup.lock ] then echo "backup.lock gefunden. Breche Vorgang ab." echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Fein, die Slug hat Luft fuer ein Backup fi # Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren if [ -f /opt/bin/rsync ] then echo "rsync ist installiert, alles bestens" else ipkg install rsync fi if [ -f /opt/bin/wc ] then echo "coreutils sind installiert, alles bestens" else ipkg install coreutils fi if [ -f /opt/bin/nail ] then echo "nail ist installiert, alles bestens" else ipkg install nail echo "bitte konfiguriere den Nail" fi # schauen wir, ob wir loggen koennen if [ -f /var/log/backup ] then echo "wir haben ein logfile, nice" else touch /var/log/backup fi # Noch ein paar Variablen Datum=$(date +%d.%m.%g--%R) SDatum=$(date +%d.%m.%g) # Pruefe die letzte Sicherung auf das Alter ergebnis=`find /$btarget/*.1.tar.gz -type f -mtime +$intervall | wc -l` # Checken ob das der erste Sicherungslauf ist ls /$btarget/*.tar.gz if [ $? != 0 ]; then zusatz=1 else zusatz=0 fi # Schwellenwert errechnen let "schwelle=$ergebnis + $zusatz" if [ $schwelle = 0 ]; then # wir sind auf dem aktuellen Stand echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup echo Backup ist auf dem letzten Stand # Bitte folgende Zeilen auskommentieren falls diese Mail nicht gewuenscht ist echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis hierher maximal auskommentieren exit 1 else # Stelle fest, ob Rechner im Netz aktiv ist ping -c 1 $ip > /dev/null if [ $? = 0 ]; then # Rechner ist gefunden, starte Backupprozedur echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup echo Zielrechner gefunden sleep 2 # Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch # rm -r /$btarget/$verzeichnis # rm -r /$btarget/$verzeichnis2 # Mounte den Sambashare des zu sichernden Pfades mkdir /mnt/$verzeichnis # mkdir /mnt/$verzeichnis2 smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword # smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword # Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share if [ -f /mnt/$verzeichnis/sichern.txt ] then #Sperrdatei anlegen touch /tmp/backup.lock echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung per E-Mail." > mail.txt nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Fahre das Backup, veraendere die Zugriffsrechte rsync -a /mnt/$verzeichnis /$btarget/ --delete # rsync -a /mnt/$verzeichnis2 /$btarget/ --delete chown -R $btarget:everyone /$btarget chmod -R 755 /$btarget # Backupverzeichnis wieder aushaengen umount /mnt/$verzeichnis # umount /mnt/$verzeichnis2 # Backup-Rolle, loesche aeltestes Backup rm /$btarget/save.3.tar.gz mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz # Gesicherte Dateien kompremieren tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis # Weitere Verzeichnisse bitte wie folgt anhaengen: # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2 gzip /$btarget/*.1.tar # Benachrichtigungen fuer das Protokoll und per E-Mail echo "$Datum ($ip): Backuped successfully" >> /var/log/backup echo Backup beendet echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Entferne Sperrdatei rm /tmp/backup.lock else echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun. # Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist: echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. exit 1 fi else echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup # Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist: echo "$Datum ($ip): Server is dead ... nothing to care about" > mail.txt nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. fi fi</pre></code> Im oberen Bereich gibt es nun ein paar Dinge für Euch zum eintragen. Ich liste die Variablen, die Ihr anpassen müsst einmal hier gesondert auf: '''ip'''=192.168.1.3 # Die IP des zu scannenden Rechner<br /> '''verzeichnis'''=transfer # Das zu sichernde freigegebene Verzeichnis<br /> '''loginname'''=backup # Loginname auf den zu sichernden Rechner<br /> '''loginpassword'''=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann<br /> '''btarget'''=backup # Zielverzeichnis der Backups auf der Slug<br /> '''intervall'''=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen<br /> '''mailadresse'''=mein @ mailadresse.de # Deine E-Mailadresse<br /> Über die IP legen wir den Rechner im Netzwerk fest, aus dem das Backup gezogen werden soll. Dazu verraten wir dem Script, wie das freigegebene Verzeichnis auf dem zu sichernden Rechner heißt. Der Loginname und das Passwort betrifft das Windowsshare, das wir auf unserem Windowsrechner angelegt haben. Die Variable btarget ist das Ziel auf der Slug, in denen die Dateien kopiert werden. Das ist genau das Heimatverzeichnis des Useres auf der Slug, den wir für die Sicherung angelegt haben. Hierauf können wir dann später auch wieder im Netz auf dieses Samba Share zugreifen und unsere Sicherungsdateien bei Bedarf wieder herholen. Zu guterletzt geben wir noch eine Mailadresse an, an der wir die Statusmelungen schicken. Das sollte natürlich Eure eigene Mailadresse sein. Wenn Ihr die Datei '''/opt/bin/backup.sh''' angelegt habt, dann ändern wir die Zugriffsrechte und stellen damit sicher, dass nur root die Datei lesen darf: <code><pre>chmod 711 /opt/bin/backup.sh</pre></code> Damit die Datei auch über die crontab regelmäßig ausgeführt wird, ergänzen wir eine Zeile in die crontab indem wir einfach folgenden Befehl eingeben: <code><pre>echo */30 * * * * root sh /opt/bin/backup.sh >> /etc/crontab</pre></code> Mit '''vi /etc/crontab''' könnt Ihr das natürlich auch manuell erledigen, oder zumindest prüfen, ob die Zeile auch tatsächlich sich nun in der crontab befindet. Das */30 sorgt dafür, dass nun das Script alle 30 Minuten gestartet wird und seinen Dienst verrichtet. Jetzt startet Eure Slug neu. Danach ist das Script aktiv. Sollte das Script nicht so laufen, wie Ihr wollt, dann meldet Euch wieder an und startet das Script manuell: <code><pre>sh /opt/bin/backup.sh</pre></code> und seht Euch eventuelle Fehlermedlunegn an. Auch könnte die lokale Logdatei Auskunft über Probleme geben: <code><pre>tail -f /var/log/backup</pre></code> Das obige Script ist dann sehr gut einsetzbar, wenn das Dateivolumen nicht allzu groß ist, da der gzip schon einiges an Zeit benötigt, um große Dateien zu packen. Wer aber 30, 40, 50 GB zu verarbeiten hat, wird wohl auf der NSLU2 mit ihren maximal 266MHz ARM Prozessor nicht recht glücklich werden. Hier empfiehlt es sich, auf ein rotierendes Backup zu verzichten, und nur eine Sicherung offen anzulegen, sodass die Pfade im Prinzip nur 1:1 auf der Platte der NSLU2 gespiegelt werden. Zudem kann über das Netz eine Sicherung von mehreren GB auch recht langwierig werden. Wer bei 50 GB die Sicherung nicht über Nacht laufen lassen möchte, der kann natürlich die externe Platte an seinen Rechner direkt anschließen, und die Verzeichnisse erstmal komplett in das Backupverzeichnis der USB Platte kopieren. Ich habe hier als zweite Variante eines Backupsriptes nun ein Beispiel mit 6 Shares geschrieben. Zudem um ein Feature erweitert: Ich grenze die Zeit ein, in der ein Backup gefahren werden darf. Und zwar möchte ich z.B. dass die Backups erst nach 9 Uhr gefahren werden, da z.B. mein Rechner in der Regel vor 9 Uhr wenn überhaupt nur kurzfristig an ist. Somit vermeide ich, dass ich eventuell während eines Backups gezwungen bin, die Maschine auszuschalten. <code><pre>#!/bin/sh # Backupscript fuer die NSLU2 -- mit Zeitstempel -- # Gargi 2007 # getestet auf unslung 6.8 beta !!!! # Das Script funktioniert nur mit den installierten nail, coreutilis und rsync: # ipkg install coreutils rsync nail # Bitte noch eine logdatei anlegen: # touch /var/log/backup # KONFIGURATIONSBEREICH ######################## ip=192.168.1.5 # Die IP des zu scannenden Rechner verzeichnis=transfer1 # Das zu sichernde freigegebene Verzeichnis verzeichnis2=transfer2 verzeichnis3=transfer3 verzeichnis4=transfer4 verzeichnis5=transfer5 verzeichnis6=transfer6 # Weitere Verzeichnisse koennen ergaenzt werden # verzeichnis2=xyz loginname=backup # Loginname auf den zu sichernden Rechner loginpassword=1234567 # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann btarget=backup # Zielverzeichnis der Backups auf der Slug intervall=3 # Groesse des Intervalls an Tagen zwischen den Sicherungen mailadresse=meine @ emailaddy.de # Deine E-Mailadresse uhrzeit=09 # Ab dieser Stunde werden erst Backupsgezogen. Vorher nicht. # ENDE DES KONFIGURATIONSBEREICHES########## # Stelle fest, ob bereits ein Sync laeuft um Ressourcen zu schonen if [ -f /tmp/backup.lock ] then echo "backup.lock gefunden. Breche Vorgang ab." echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Fein, die Slug hat Luft fuer ein Backup fi # Beende das Script vor einer bestimmten Uhrzeit zeit=$(date +%H) if [ $zeit -lt $uhrzeit ];then echo das ist mir zu bald am morgen echo "Zwischen 0 und $uhrzeit Uhr sind Backups ausgeklammert. Stoppe Funktion bis $uhrzeit Uhr" > mail.txt nail -s "[Backup] Guten Morgen Nachricht" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Die Zeit geht in Ordnung, wir koennen versuchen, das Backup zu starten. fi # Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren if [ -f /opt/bin/rsync ] then echo "rsync ist installiert, alles bestens" else ipkg install rsync fi if [ -f /opt/bin/wc ] then echo "coreutils sind installiert, alles bestens" else ipkg install coreutils fi if [ -f /opt/bin/nail ] then echo "nail ist installiert, alles bestens" else ipkg install nail echo "bitte konfiguriere den Nail" fi # schauen wir, ob wir loggen koennen if [ -f /var/log/backup ] then echo "wir haben ein logfile, nice" else touch /var/log/backup fi # Noch ein paar Variablen Datum=$(date +%d.%m.%g--%R) SDatum=$(date +%d.%m.%g) # Pruefe die letzte Sicherung auf das Alter ergebnis=`find /$btarget/*.tstamp.txt -type f -mtime +$intervall | wc -l` # Checken ob das der erste Sicherungslauf ist ls /$btarget/*.tstamp.txt if [ $? != 0 ]; then zusatz=1 else zusatz=0 fi # Schwellenwert errechnen let "schwelle=$ergebnis + $zusatz" if [ $schwelle = 0 ]; then # wir sind auf dem aktuellen Stand echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup echo Backup ist auf dem letzten Stand # Bitte folgende Zeilen falls diese Mail nicht gewuenscht ist echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis hierher maximal auskommentieren exit 1 else # Stelle fest, ob Rechner im Netz aktiv ist ping -c 1 $ip > /dev/null if [ $? = 0 ]; then # Rechner ist gefunden, starte Backupprozedur echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup echo Zielrechner gefunden sleep 2 # Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch # rm -r /$btarget/$verzeichnis # rm -r /$btarget/$verzeichnis2 # Mounte den Sambashare des zu sichernden Pfades mkdir /mnt/$verzeichnis mkdir /mnt/$verzeichnis2 mkdir /mnt/$verzeichnis3 mkdir /mnt/$verzeichnis4 mkdir /mnt/$verzeichnis5 mkdir /mnt/$verzeichnis6 smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis3 /mnt/$verzeichnis3 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis4 /mnt/$verzeichnis4 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis5 /mnt/$verzeichnis5 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis6 /mnt/$verzeichnis6 -o username=$loginname,password=$loginpassword # Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share if [ -f /mnt/$verzeichnis/sichern.txt ] then #Sperrdatei anlegen touch /tmp/backup.lock echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung per E-Mail." > mail.txt nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Fahre das Backup, veraendere die Zugriffsrechte rsync -a /mnt/$verzeichnis /$btarget/ --delete rsync -a /mnt/$verzeichnis2 /$btarget/ --delete rsync -a /mnt/$verzeichnis3 /$btarget/ --delete rsync -a /mnt/$verzeichnis4 /$btarget/ --delete rsync -a /mnt/$verzeichnis5 /$btarget/ --delete rsync -a /mnt/$verzeichnis6 /$btarget/ --delete chown -R $btarget:everyone /$btarget chmod -R 755 /$btarget # Backupverzeichnis wieder aushaengen umount /mnt/$verzeichnis umount /mnt/$verzeichnis2 umount /mnt/$verzeichnis3 umount /mnt/$verzeichnis4 umount /mnt/$verzeichnis5 umount /mnt/$verzeichnis6 # Backup-Rolle, loesche aeltestes Backup # rm /$btarget/save.3.tar.gz # mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz # mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz # Gesicherte Dateien kompremieren # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis # Weitere Verzeichnisse bitte wie folgt anhaengen: # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2 # gzip /$btarget/*.1.tar # Loesche alten Zeitstempel rm /$btarget/*.tstamp.txt # Setze neuen Zeitstempel touch /$btarget/$SDatum.tstamp.txt # Benachrichtigungen fuer das Protokoll und per E-Mail echo "$Datum ($ip): Backuped successfully" >> /var/log/backup echo Backup beendet echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Entferne Sperrdatei rm /tmp/backup.lock else echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun. # Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist: echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. exit 1 fi else echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup # Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist: echo "$Datum ($ip): Server is dead ... nothing to care about" > mail.txt nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. fi fi</pre></code> Falls Ihr nun mehre Rechner im Netz sichern wollt, dann legt hierfür ein neues Script an. Dieses startet über die cron einwenig zeitversetzt zum anderen Script, damit die sich nicht so leicht in die Quere kommen. Damit dies aber auch nicht passieren kann und die Slug durch zwei parallel laufenden Backupvorgänge in die Knie gezwungen wird, habe ich einen Sperrmechanismus integriert, der dafür sorgt, dass ein zweites Script nur dann starten kann, wenn das erste auch beendet ist. Viel Spaß beim Sichern! <br /> <br /> <br /> 67f4b8b98b1374c8f838f68ef6e2cc4174b87b42 Datei:Slug20.png 6 37 46 2009-06-02T21:29:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug21.png 6 38 47 2009-06-02T21:29:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug22.png 6 39 48 2009-06-02T21:30:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug23.png 6 40 49 2009-06-02T21:30:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug24.png 6 41 50 2009-06-02T21:31:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug25.png 6 42 51 2009-06-02T21:31:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug26.png 6 43 52 2009-06-02T21:31:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug27.png 6 44 53 2009-06-02T21:32:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug28.png 6 45 54 2009-06-02T21:32:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 IMAP Mail Server 0 46 55 2009-06-02T21:34:46Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> '''IMAP Server auf der NSLU2 mit Dovecot und getmail''' ==Erste Gedanken über einen optimalen Aufbau== Voraussetzungen: Auf der NSLU2 befindet sich unslung 6.8. Das System ist entsprechend vorbereitet und ich empfehle zur einfacheren und sicheren Administration die Installation des Midnight Commanders und openssh. Im Grunde möchten wir einen Mailserver einrichten, der für uns die E-Mails immer vorrätig hält. Wir möchten vom internen Netz und aber auch einmal von außerhalb auf unsere Mailbox zugreifen. Hierzu muss der IMAP Server entsprechend von außen her erreichbar sein. Unsere NSLU2 soll in regelmäßigen Abständen unsere unterschiedlichen Postfächer diverser Provider abrufen und an unsere Postfächer auf der NSLU2 ausliefern. Via Webmail oder daheim vom Client aus wollen wir darauf zugreifen können. Natürlich können wir dann auch einen Client auf unserem Laptop installieren, der auch auf die Mailboxen der NSLU2 direkt zugreifen kann. Hierfür benötigen wir auf unserer NSLU2 einen IMAP Server (Dovecot [http://www.dovecot.org/]) und ein Programm, das unsere Mailboxen nach neuen Mails prüft und zu uns auf den Mailserver holt (Getmail). Einen besseren Überblick über unser Projekt bekommt man über folgendes Schema, das den Weg der Mails und die Aufgaben der einzelnen Komponenten in diesen Kreislauf veranschaulichen soll: [[Bild:slug29.jpg|center]] Man kann im Grunde eine IMAP Umgebung auf zwei Arten einrichten. Die eine wäre die Verwendung von Mailboxen, wobei alle Mails in eine Datei gespeichert werden. Die Gefahr hierbei ist allerdings, dass wenn diese einzelne Datei beschädigt wird, man eventuell alle E-Mails auf einen Rutsch verlieren kann. Zudem kann das System langsam werden, je größer die Datei wird. Ich empfehle daher die zweite Variante zu verwenden, das Mailverzeichnis (maildir). Innerhalb eines Mailverzeichnisses werden die E-Mails jeweils als eine einzelne Datei pro Email abgelegt. Zudem besteht auch hier die Möglichkeit, dass der Client erstmal nur die Mailheader synchronisiert und nicht die kompletten E-Mails mit Inhalt als Spiegelbild des IMAP Servers. Zudem macht ein inkrementales Backup bei vielen kleinen Dateien mehr Sinn, da nur die Veränderungen in den Teilbereichen neu gespeichert werden müssen und nicht jedes mal eine einzige große Datei. Danach entscheiden wir uns die '''/etc/passwd''' Datei zur Authentifizierung zu verwenden. Also das verschlüsselte Passwort für den einzelnen Nutzer, den wir auf der SLUG generieren. Das hat zudem den Vorteil, dass wir auch so auf jede einzelne Mailbox intern via SMP zugreifen können, um mal ein manuelles Backup der Mailverzeichnisse zu machen oder auch einmal um etwas zu reparieren. <br /> <br /> <br /> ==Vorbereitung und Einrichten der ersten Mailbox== Für jede Mailbox legen wir uns einen neuen User über die Webadministratur der NSLU2 an. Dabei richten wir dem Mailbox User einen eigenen Share ein, den man auch ein Quota-Limit verpassen kann, wenn zu wenig Platz auf der NSLU2 vorhanden sein sollten. Das Heimatverzeichnis eines NSLU2 Users ist bekanntlich nicht unter '''/home''' zu suchen, sondern das liegt direkt Wurzelverzeichnis der NSLU2. Ganz wichtig hierbei ist zu beachten, dass die Verzeichnisse und Dateien innerhalb des Userverzeichnisses dem Nutzer (also Name der Mailbox) und der Gruppe everyone gehören. Alle Files darunter müssen diese User/Gruppenrechte haben. Ändert diese also entsprechend ab, solltet Ihr einmal Dateien als root hier hineinkopieren. Danach editiert die '''/etc/passwd''' Datei und ändert hinten in der Zeile Eures Nutzers wie folg ab: '''mailboxname:1234verschlüsseltps:2008:501:::/dev/null''' in '''mailboxname:1234verschlüsseltps:2008:501::/mailboxname:/bin/sh''' Ihr gebt damit dem System noch einmal das korrekte Homeverzeichnis und die Shell vor. Das ist wichtig, weil später der getmail-Prozess ein Script ausführen wird und Ihr eventuell über su von root zum User wechseln müsst, um Arbeiten an diversen Scripten vornehmen zu können oder bestehende umzukopieren. Jetzt loggt Euch von Eurem Rechner auf die NSLU2 via smb ein und legt das Verzeichnis '''mailbox''' und '''.getmail''' an. Das Getmail Verzeichnis muss ein verstecktes Verzeichnis sein, deswegen der "." vor getmail . Unterhalb vom Verzeichnis '''mailbox''' legt noch die Verzeichnisse '''cur''', '''new''' und '''tmp''' an. Damit haben wir den ersten Nutzer angelegt. Später müssen wir noch zwei Dateien anlegen, nachdem die dazugehörigen Serverprogramme laufen. <br /> <br /> <br /> ==Den Server installieren== Loggt Euch nun via ssh auf Eure NSLU2 als root ein und installiert dovecot, getmail cron und python: <code><pre>ipkg install dovecot py25-getmail cron python</pre></code> Das erstellt dann alle notwendigen Skripte auf Eurer Maschine. Als nächstes müssen wir den Dovecot konfigurieren. Editiert '''/opt/etc/dovecot/dovecot.conf''' und sucht nach der '''default_mail_env''' Variable und ändert diese auf <code><pre>default_mail_env = maildir:/%u/mailbox</pre></code> ab. Damit stellen wir sicher, dass das Zielverzeichnis das Verzeichnis "mailbox" im jeweiligen Userverzeichnis ist. Die Variable %u sorgt dafür, dass dann jeder User seine Mails in das Verzeichnis mailbox bekommt, der dafür vorgesehen ist und wir das nicht einzeln hier festlegen müssen. Nun arbeiten wir auf der NSLU2 als normaler Nutzer weiter. Gebt dazu <code><pre>su</pre></code> Euer Mailboxnameein. Sollte das nicht funktionieren und Ihr bekommt nur die Anzeige seitens des Programmes tinylogin, so müsst Ihr noch die Entwicklerdateien der SLUG installieren. Holt das mit <code><pre>ipkg install optware-devel</pre></code> nach. Dann könnt Ihr mit su wechseln. Wechselt dann in das Mailverzeichnis <code><pre>cd /maiboxname</pre></code> und legt eine neue Datei getmail.sh an. <code><pre>touch getmail.sh</pre></code> Füllt diese mit folgenden Inhalt über '''vi''' oder '''mcedit''' <code><pre>#!/bin/sh # get the mails for the user directory /opt/bin/getmail -q --rcfile /username/.getmail/mailrc</pre></code> Der "username" ist natürlich der Platzhalter für den Namen Eurer Mailbox, den Ihr bitte entsprechend ändert. Das Skript MUSS nun ausführbar gemacht werden: <code><pre>chmod +x getmail.sh</pre></code> Prüft, ob die Nutzer der Datei richtig gesetzt sind (wir erinnern uns: username:everyone) <code><pre>ls -la</pre></code> Falls hier etwas nicht passen sollte, dann bitte sofort abändern: <code><pre>chown username:everyone getmail.sh</pre></code> Jetzt können wir den Getmail vorbereiten. Die Aufgabe von Getmail wird es sein, die E-Mails von außerhalb aus unseren Mailboxen abzuholen um diese dann an unser mailbox-Verzeichnis weiter zu geben. Damit getmail die dafür benötigten Informationen wie Zugangsdaten und Zielverzeichnis geliefert bekommt legt eine Datei unter '''/mailboxname/.getmail''' mit dem Namen '''mailrc''' an. Füllt diese wie folgt: <code><pre>[options] delete = true [retriever] type = SimplePOP3Retriever server = pop.deinmailserver.de username = username_mailserver password = passwort [destination] type = Maildir path = /mailboxname/mailbox/</pre></code> Auch hier wieder die korrekten Besitzrechte ändern, falls nicht ordentlich gesetzt: <code><pre>chown username:everyone mailrc</pre></code> Solltet Ihr nicht wollen, dass die Mails vom Mailserver gelöscht werden (weil Ihr diese z.B. mit einem weiteren Mailer nochmals herunterladen und sichern wollt) dann sollte die '''mailrc''' wie folgt geändert werden: <code><pre>[options] delete = false read_all = false [retriever] type = SimplePOP3Retriever server = pop.deinmailserver.de username = username_mailserver password = passwort [destination] type = Maildir path = /mailboxname/mailbox/</pre></code> Testet nun mit einem '''sh getmail.sh''' ob der Maildownload funktioniert. Schickt Euch zum Test vorher selbst eine E-Mail zu. Schaut im Verzeichnis '''/mailbox/new''' nach, ob dort sich eine E-Mail befindet. Damit getmail in Zukunft zu regelmäßigen Zeiten Eure Mailboxen nach E-Mails absucht müssen neue Cronjobs eingerichtet werden. Der normale Corn, der in der unslung bereits vorhanden ist hat hier leider ein Manko: Er kann nur Crons seitens des root-Nutzers ausführen. Getmail arbeitet allerdings aus Sicherheitsgründen nur als normaler User. Deswegen haben wir uns bereits eine weitere cron- Alternative eingangs installiert. Die Cronjobs werden hierfür nun unter '''/opt/var/cron/crontabs''' abgelegt. Den ersten müssen wir der Einfachkeit halber als root anlegen. Solltet Ihr nicht bereits wieder "root" sein und noch als User angemeldet, dann verlasst diese Ebene mit einem <code><pre>exit</pre></code> Nun starten wir den cron Editor mit <code><pre>crontab -e</pre></code> Folgende Zeile wie mit dem vi Editor eingeben: <code><pre>*/5 * * * * /username/getmail.sh &>/dev/null</pre></code> Das wird den getmail für den speziellen User alle 5 Minuten auslösen. Ändert den Wert nach Euren Vorstellungen ab und speichert die Änderung. Da wir den Job allerdings als User ausführen müssen kopiert <code><pre>cp /opt/var/cron/crontabs/root /opt/var/cron/crontabs/username</pre></code> Ganz wichtig hier ist, dass Ihr nicht vergesst, die richtigen Benutzer auf Euren nene cron zu schlüsseln. Auch hier wie gewohnt: <code><pre>chown username:everyone /opt/var/cron/crontabs/username</pre></code> Jetzt editiert nocheinmal die root crontab <code><pre>vi /opt/var/cron/crontabs/root</pre></code> und werft wieder die getmail- Zeile dort raus. Denn schließlich liegt die jetzt in der User Cron und hat da nichts mehr unter root verloren. Ihr müsst später dann für JEDEN neuen User eine zusätzliche cron einrichten. In der Cron Datei müsst Ihr dann jeweils den Pfad ändern und immer den korrekten Benutzer und die Gruppe setzen wenn Ihr die Datei von einer alten Cron auf Eure neue Cron kopiert. Nach jeder Änderung startet den Cron Dämon neu: <code><pre>/opt/etc/init.d/S10cron /opt/etc/init.d/S90dovecot restart</pre></code> Ein Neustarten der NSLU2 ist damit nicht notwendig. Nun ist es an der Zeit, unseren neuen Server zu testen. Mittels eines Mail Client legt Euch ein neues Postfach für IMAP an. Schickt Euch selbst eine Email und wartet einwenig ab. Wenn alles gut gelaufen ist bekommt Ihr Eure erste E-Mail via IMAP zugestellt. Für alle weiteren Mailboxen müsst Ihr obige Schritte wiederholen. Diese in einer Kurzübersicht: '''1)''' Lege einen neuen Nutzer mit einem Share via Webadmin an<br /> '''2)''' Lege das mailbox und .getmail Verzeichnis an<br /> '''3)''' Erstelle die rc Datei für getmail im .getmail Verzeichnis und gebe dort den Zugang zur externen Mailbox an<br /> '''4)''' Erstelle das getmail.sh Skript im Heimatverzeichnis der Mailbox<br /> '''5)''' Lege einen neuen Cronjob für die neue Mailbox an<br /> Zudem: immer auf die richtigen Nutzerrechte und Dateizugehörigkeiten achten! Um den korrekten Ablauf zu überwachen könnt Ihr Euch die Logdatei ansehen: <code><pre>tail -f /var/log messages</pre></code> <br /> <br /> <br /> ==SSL/TSL Setup== Nachdem wir nun einen IMAP Server am Laufen haben sollten wir uns Gedanken über den Datenaustausch beim Login machen. Hier werden ja Nutzer und Passwort über das Netz geschickt. In einem lokalen Netzwerk vielleicht jetzt nicht ganz so gefährlich, als wenn wir später das gleiche über einen Webmailer machen. Da sollte der Datenausstausch gesichert über ssl erfolgen. Nun erstellt zwei neue Verzeichnisse, in denen später das Zertifikat abgelegt wird: <code><pre>mkdir /etc/ssl mkdir /etc/ssl/certs mkdir /etc/ssl/private</pre></code> Führt dann das mkcert.sh Skript im '''/opt/etc/dovecot''' Verzeichnis aus um Euer Zertifikat zu erstellen und anzulegen: <code><pre>sh mkcert.sh</pre></code> Editiert '''/opt/etc/dovecot/dovecot.conf''' und Ändert folgende Variablen ab: '''ssl_disable = yes''' in '''ssl_disable = no''' und hier der richtige Pfad zu den Zertifikaten: '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br /> '''ssl_key_file = /etc/ssl/private/dovecote.pem''' Achtet zudem, dass bei den zu startenden Protokollen neben dem imap auch imaps in der dovecot.conf steht. Ergänzt das beim Parameter '''protocols''' gegebenfalls. Dann startet Dovecot neu: <code><pre>/opt/etc/init.d/S90dovecot restart</pre></code> Nun müsst Ihr noch Euren Mail Client für SSL/TSL anpassen. Das geht von Mailer zu Mailer unterschiedlich. Wenn Ihr dann gefragt werdet, ob Ihr ein Zertifikat akzeptieren wollt habt Ihr es geschafft. <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==Dovecot auf der NSLU2 selbst kompilieren== Als ich ein paar Probleme mit dem ssl Handshake hatte und festellte, dass es neueren Dovecot Code gibt, habe ich mich entschlossen, meinen Dovecot von Grund auf selbst zu bauen. Das ist keine wirklich schwere Angelegenheit. Installiert zuerst folgende Pakete: <code><pre>ipkg install optware-devel openssl-dev </pre></code> Erstellt ein Build Verzeichnis: <code><pre>mkdir work</pre></code> Hier ladet dann den Quellcode der aktuellen Version herunter (z.B.) <code><pre>wget http://www.dovecot.org/releases/1.1/dovecot-1.1.4.tar.gz</pre></code> (Schaut im Downloadbereich unter http://www.dovecot.org nach, ob das auch die aktuelle Version ist) Wie gehabt auspacken: <code><pre>tar -zvxf dovecot-1.1.4.tar.gz</pre></code> Wechselt in das neue Verzeichnis dovecot-1.1.4 und bereitet den Kompilierungsvorgang vor: <code><pre>CPPFLAGS=-I/opt/include LDFLAGS=-L/opt/lib ./configure --prefix=/opt --with-ssl=openssl --with-ssldir=/etc/ssl</pre></code> Dann wird übersetzt: <code><pre>make</pre></code> An der Stelle könnt Ihr einen Kaffee trinken gehen. Auf dem 266MHz ARM Prozessor dauert das seine Zeit- Dann installieren wir ganz unkonventionell den dovecot wie ipkg: <code><pre>ipkg install dovecot</pre></code> Das machen wir, damit alle Verzeichnisse und auch das Startscript unter '''/opt/etc/init.d''' angelegt wird. Die alten Files werden dann mit unseren neuen übersetzten überschrieben: <code><pre>make install</pre></code> Danach müssen wir zwei Bibliotheken umlinken, damit die neue Programmversion diese unter '''/lib''' findet: <code><pre>ln -s /opt/lib/libssl.so.0.9.7 /lib/libssl.so.0.9.7 ln -s /opt/lib/libcrypto.so.0.9.7 /lib/libcrypto.so.0.9.7</pre></code> Legt zwei neue Verzeichnisse für die Zertifikate an (falls noch nicht geschehen): <code><pre>mkdir /etc/ssl mkdir /etc/ssl/certs mkdir /etc/ssl/private</pre></code> Sollten hier schon Dovecot Zertifikate der alten Version liegen entfernt die besser erst einmal. In '''/work/dovecot-1.1.4/doc/''' führt dann <code><pre>sh mkcert.sh</pre></code> aus und die Zertifikate werden erstellt. Wir kümmern uns nun um die dovecot.conf Datei. Solltet Ihr bereits schon den Dovecot in der Slug Version am Laufen gehabt haben, dann liegt diese bereits unter '''/opt/etc/dovecot.conf'''. Da sich an manchen Stellen die Notierung geändert hat kopiert diese ersteinmal um ( z.B. dovecotconf.old). Schaut Euch dann die '''/opt/etc/dovecot-example.conf''' an. Dies ist eine Beispielskonfiguration der neuen Dovecot Version. Gleicht diese ersteinmal mit den Einstellungen Eurer alten Konfig ab. Wenn Ihr Dovecot neu installiert habt muss das von Grund auf neu durchgegangen werden. Speichert die fertige Konfiguration dann als '''dovecot.conf''' ab. Die SSL Geschichten müssen dann wie oben bereits besprochen aktiviert werden. Startet dann Dovecot neu: <code><pre>/opt/etc/init.d/S90dovecot restart</pre></code> <br /> <br /> <br /> ==Externer Webmailer== Um einmal von außen auf Eure E-Mails zugreifen zu können empfehle ich den Webmailer Roundcube [http://roundcube.net/]. Roundcube benötigt hierfür einen Webspace mit php und einer mysql Datenbank. Ihr müsst nur ein paar wenige Angaben in den Konfigurationsdateien von Roundcube erledigen, die fast selbsterklärend sind. Etwas kniffeliger wird es beim Anlegen der mysql Tabellen. Das wird über einen mysql Befehl erledigt, den man aber auch über den phpmyadmin absetzen kann, der bei den meisten Hoster denke ich mit angeboten wird. Mittels Roundcube könnt Ihr Euch über das Login in jder Eurer Mailboxen einloggen. Das geschieht über das bekannte Login auf der Slug. Deshalb UNBEDINGT das SSL in der Roundcube Konfiguration aktivieren. Dann wird der Handshake geschützt ausgeführt. Ansonsten bietet Rondcube die entsprechenden Verwaltungsmöglichkeiten der gängigen Webmailer. Es können Absendeadressen angelegt werden, ein eigenes Adressbuch und auch E-Mails verschickt werden. Dazu nutzt Roundcube den Mailer des Servers, auf dem dieser seinen Dienst verrichtet. Konfigurationshilfen und Anleitungen findet Ihr auf der Roundcube Projektseite [http://roundcube.net/]. Diese sind sehr gut und einfach nachzuvollziehen, weshalb ich hier auf eine weitere Dokumentation verzichte. Roundcube Webmailer: [[Bild:slug30.jpg|center]] <br /> <br /> <br /> ==FAQ== '''Q''': Der Webmailer kann sich nicht an die SLUG anbinden. Der IMAP Server liefert mir einen Timeout<br /> '''A''': Du musst den Port 143 (imap) und 993 (imaps) an die IP Deiner NSLU2 weiterleiten. Das geht über Deinen Router. Der hat normalerweise in seiner Konfiguration die Möglichkeit, Ports auf eine IP Adresse im LAN weiter zu leiten. Wie das funktioniert verrät die Betriebsanleitung des jeweiligen Routers. Das ist von Hersteller zu Hersteller und Modell zu Modell durchaus unterschiedlich zu konfigurieren. '''Q''': Wenn ich mir die var/log/messages ansehe, dann bekomme ich die Meldung, dass der getmail Cron eines Users UNSAFE sei. Was hat das zu bedeuten?<br /> '''A''': Da der Cron seitens eines Users passiert ist der Prozess normalerweise sicher, da das nicht über Root passiert. Jedoch kann es sein, dass vergessen wurde, bei der getmail.sh den korrekte Nutzer zu setzten. Prüft das zuerst nach. Falls dass der Fall ist bitte mit einem chown wie oben beschrieben korrigieren. Ich hatte auch den Fall, dass der User gestimmt hat. Kurioserweise war der Fehler damit zu beheben, indem ich einfach den entsprechenden Cronjob mit einem Editor geöffnet habe: '''mcedit /opt/var/cron/crontabs/yourcronjob''' (Midnight Commander muss dafür installiert sein) Danach einfach wieder speichern ohne etwas zu verändern. Dann nur noch den cron Dämon mit '''/opt/etc/init.d/S10cron''' neu starten. Danach sollte der Fehler weg sein. '''Q''': Mein Mailer der SSL verwendet sagt, dass die SLUG ein falsches Zertifikat hat, weil der NSLU2 Hostame von dem im Zertifikat abweicht.<br /> '''A''': Hierzu muss die ssl Konfiguration im Arbeitsverzeichnis geändert werden: '''/work/dovecot-1.0.7/doc/dovecot-openssl.cnf''' . Hier muss ein Parameter (common name) auf die IP Adresse oder dem Domain Namen der NSLU2 geändert werden. Normalerweise sollte wird das wie folgt aussehen: '''CN=192.168....''' (hier Diene IP bitte eintragen). Jetzt die Änderungen speichern und die alten Zertifikate '''/etc/ssl/certs/dovecot.pem''' und '''/etc/ssl/private/dovecot.pem''' löschen. Dann nocheinmal '''mkcert.sh''' im .../dovecot-1.0.7/doc/ Verzeichnis ausführen. Dovecot neu starten : '''/opt/etc/init.d/S90dovecot''' . '''Q''': Windows Mail bricht manchmal mit einem Timeout ab.<br /> '''A''': Wenn manchmal etwas mehr zu synchronisieren ist kann es vorkommen, dass der Client zu lange auf die Beendigung des Vorganges warten muss. Hierzu kann man den Servertimeout in den Konteneinstellungen jedes einzelnen Kontos unter Erweitert verlängern. Stellt das auf 2 Minuten ein, das sollte genügen. '''Q''': Kann es sein, dass meine E-Mails nicht mehr auf Viren untersucht werden?<br /> '''A''': Manche Virenscanner scannen von Haus aus nicht auf gesicherte Verbindung. Wenn also ein SSL Handshake verwendet wird, dann kann es sein, dass der Scanner hier davon ausgeht, dass die Verbindung sicher ist und er hier nichts zu tun hat. Man kann dies in der Konfiguration des Scanners oft verändern und diesen auch gesicherte Verbinden überprüfen lassen. Alternativ kann man aber auch im lokalen Netzwerk seinen Mailer eine ungesicherte Verbindung zulassen, damit der Scanner wieder seine Arbeit erledigen kann. Entscheidet selbst, wie herum Ihr das machen wollt. '''Q''': Wenn ich beim Roundcube Mailer manche Ordner aufrufe benötigt er sehr lange um zu synchronisieren und bleibt hängen.<br /> '''A''': Klickt einfach auf "Refresh/Neu laden" im Browsermenü. Dann sollte es normalerweise gehen. Es kann auch sein, dass Ihr in der Konfiguration des Webmailers das Cashing aktiviert habt. Stellt dieses in der Main-Config auf false. Das behebt so manche Probleme. <br /> <br /> <br /> 2afa6d8877555612e5aa1143a5d89d6861dbeda3 Datei:Slug29.jpg 6 47 56 2009-06-02T21:35:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug30.jpg 6 48 57 2009-06-02T21:35:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian auf der NSLU2 0 49 58 2009-06-02T21:39:16Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggy.png|Debbislug]] <br /> ''Um den Finger gewickelt''</div> Wer glaubt, dass mit dem Unslung das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht. So hat es nicht lange gedauert, bis eine spezielle Version für unsere geliebte Schnecke erhältlich gewesen ist. Nun kann ein Debian Etch auf der Slug installiert werden. Hierzu gibt es zwei Varianten, die erhältlich sind. Zum einen die reine Debian Variante ohne proprietären Treiber für den NSLU2 IXP4xx Netzwerkchip. Hier muss dann ein externer USB Netzwerkadapter verwendet werden. Desweiteren gibt es ein unofficial Pakage mit dem Treibermodul um eben den internen Netzwerkchip in Betrieb nehmen zu können. Aber egal was Ihr verwendet, die Installation sieht bei beiden Varianten gleich aus. Ihr installiert die Debian Firmware und loggt Euch via ssh ein. Dort wartet auch schon der Installer, der Euch durch den zugegeben etwas langwierigen Installationsprozess führt. Ihr werdet dort ein Basissystem installieren. Ebenso legt Ihr dann dort das Root-Passwort fest und erstellt einen ersten User. Bereits hier könnt Ihr schon Pakete für einen Webserver auswählen. Nachdem das System die Installation durchgeführt hat wird die Slug neu booten und ein Debianserver Euch beim nächsten Login begrüßen. Hierbei müsst ihr folgendes beachten: Die Debian Slug hat nachher keinen Webadmin mehr. Ebenso wird kein Samba Server von Haus aus installiert sein. Dieser muss dann neu eingerichtet werden, sollte dieser auf der Debian Slug benötigt werden. Erwartet zudem keine Geschwindigkeitsrekorde. Die Debianinstallation sollte von daher nur für eine Aufgabe verwendet werden (Firewall, FTP, Downloadbüchse etc.), denn die 32 MB Ram werden von Haus aus nur noch 10 bis 11 MB freien Speicher zur Verfügung stellen, wenn einmal das Basissystem gebootet hat. Versteht die Debian Installation als Bastelgerät mit dem Ihr einfach Spaß haben wollt. ==Vorbereitung== Bevor Ihr allerdings mit der Installation loslegt solltet Ihr auf alle Fälle Eure Slug richtig im Webadmin konfiguriert haben. Die gewünschte IP Adresse und der Gateway muss eingetragen sein. Diese Werte übernimmt der Debianinstaller entsprechend. Ladet nun die gewünschte Debianfirmware herunter: '''Debian (free), di-nslu2.bin''' [http://ftp.de.debian.org/debian/dist...xp4xx/netboot/] '''Debian (mit IXP4xx Netzwerkmodule für die Slug)''' [http://www.slug-firmware.net/d-dls.php] Flashen der Firmware: ==='''Möglichkeit A)'''=== Hier könnt Ihr die '''di-nslu2.bin''' über den Webadmin hochladen. Gebt dazu den genauen Speicherplatz des Images an: [[Bild:debian_slug01.png]] Nächstes erhaltet Ihr die obligatorische Sicherheitsabfrage: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:debian_slug02.png.png]]</div> Danach kann es eine kurze Weile dauern, bis das Eeprom geflasht wird. Ihr erkennt das an der Slug, dass nun das Power-LED Rot / Grün blinkt. Unterbrecht diesen Vorgang auf keinen Fall. Ein vorzeitiges Abbrechen kann die NSLU2 erstmal für Euch unerreichbar machen. Zudem kann es leider vorkommen, dass das Update mit einem Fehler abbricht (bad file Format). Versucht es dann eventuell mit einem anderen Browser. Sollte auch das nicht fruchten, so fahrt spätestens dann mit der Variante B fort: ==='''Möglichkeit B)'''=== Das meine ich ist der etwas einfachere Weg und geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> '' (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2)'' Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet. Jetzt sind wir soweit und können mit der Installation loslegen: ==Debian installieren== Steckt an den ersten Port Eure USB Platte an und startet die Kiste neu, damit sicher gestellt ist, dass die Platte einsatzbereit ist. Danach verbindet Ihr Euch über ssh mit der Slug: <code><pre>ssh installer@xxx.xxx.xxx.xxx (IP der Slug)</pre></code> Das Passwort lautet '''install''' . Ihr solltet nun folgende Anzeige bekommen: [[Bild:debian_slug03.png]] Hier wählt Ihr dann "'''Start Menu'''" aus. Im nächsten Menü dann die korrekte Ländereinstellung: [[Bild:debian_slug04.png]] Wählt dann einen Spiegelserver aus, von dem weitere Installationspakete nachgeladen werden sollen: [[Bild:debian_slug05.png]] Einen Proxy brauchen wir nicht zwingend auswählen, außer Ihr verwendet einen: [[Bild:debian_slug06.png]] Falls nicht, lasst das Eingabefeld leer und fahrt mit '''continue''' fort. Nun bekommt Ihr ein Auswahlmenü für diverse Module, die geladen werden können: [[Bild:debian_slug07.png]] Notwendig für die Installation auf eine USB Platte sind folgende Module: * partman-auto: Automatically partition storage devices (partman) * partman-ext3: Add to partman support for ext3 * usb-storage-modules-2.6.18-5-ixp4xx-di: USB storage support Hierbei wird dafür gesorgt, dass das ext3 Format verwendet wird. Ebenso das Modul für die USB Festplatte und der Partman zur Partitionierung der Platte. Jetzt werden einige zusätzliche Komponenten geladen: [[Bild:debian_slug08.png]] Danach wird das Partitionierungsprogramm gestartet: [[Bild:debian_slug09.png]] An der Stelle könnt Ihr die Vorgabe des Systems verwenden (guided) oder auch per Hand (manual) einstellen: [[Bild:debian_slug10.png]] Da wir die komplette Platte für unser Slug verwenden wollen können wir ruhig den guided Modus verwenden. Wählt dazu Eure Festplatte aus, die an der Stelle angezeigt werden sollte: [[Bild:debian_slug11.png]] Im nächsten Menü können verschiedene Vorgaben ausgewählt werden. Man kann durchaus die komplette Platte für root verwenden, sofern eh nichts anderes mit der Platte passiert. Anderweitig empfiehlt es sich auch eine getrennte /home Partition einzurichten: [[Bild:debian_slug12.png]] Übernehmt dann die Einstellung mit "'''Finish partitioning and write changes to disk'''" [[Bild:debian_slug13.png]] Eine letzte Sicherheitsabfrage, die Ihr mit "'''yes'''" beantworten könnt: [[Bild:debian_slug14.png]] Die Platte wird dann formatiert (spätestens hier sind alle Daten, die vorher auf dieser Platte waren futsch): [[Bild:debian_slug15.png]] Als nächstes stellt die korrekte Sprache ein: [[Bild:debian_slug16.png]] Die Systemzeit wird eingestellt: [[Bild:debian_slug17.png]] Danach legt Euer Root-Passwort fest: [[Bild:debian_slug18.png]] Das muss noch einmal bestätigt werden: [[Bild:debian_slug19.png]] Jetzt legt Ihr einen ersten Benutzer an: [[Bild:debian_slug20.png]] Der Username für den Account: [[Bild:debian_slug21.png]] Das Passwort: [[Bild:debian_slug22.png]] Und auch nochmal zu bestätigen: [[Bild:debian_slug23.png]] Das Basissystem wird danach installiert, was durchaus einwenig dauern kann: [[Bild:debian_slug24.png]] Der Tasksel zur Auswahl der zu installierenden Software wird gestartet: [[Bild:debian_slug25.png]] Bei der nächsten Abfrage entscheidet Ihr, ob Ihr an der statistischen Erfassung bezüglich der Verwendung der Programmpakete teilnehmen wollt: [[Bild:debian_slug26.png]] Ich empfehle hier erstmal nur das '''Standard System''' zu installieren. Was wir später benötigen können wir immer noch installieren. Zuerst sollten wir nicht zu viel Zeit mit langwierigen Installationsprozessen von Programmen verschwenden, die wir dann schlußendlich doch nicht benötigen. Also lassen wir nur den Menüpunkt "'''Standard System'''" aktiviert und gehen auf '''Continue''': [[Bild:debian_slug27.png]] Jetzt werden die Programme über das Netz nachgezogen. Das kann auch einwenig Zeit in Anspruch nehmen. Gönnt Euch hier zwischenzeitlich ruhig einen Tee und vielleicht eine netten Film auf DVD ;-) [[Bild:debian_slug28.png]] Wenn das geschafft ist, wird das System zum Reboot vorbereitet: [[Bild:debian_slug29.png]] Das finale Bild: [[Bild:debian_slug30.png]] Startet das System dann mit "'''continue'''" neu durch. Der Bootvorgang dauert einwenig, aber wenn Ihr die Slug 3x piepsen hört könnt Ihr Euch nun via ssh auf Euren Server einloggen. Der Zugang geht dann entweder über "root" mit Eurem festgelegten Passwort oder mittels Eurem ersten Standard- User. Glückwunsch! Ihr habt jetzt ein waschechtes Debian auf der Slug laufen! Von hier aus könnt Ihr als erfahrene Linux Administratoren dann schalten und walten was unsere liebe Schnecke so hergibt. 4ac8c79b483e4a2f2d7d6161bc83dab4b72933b1 60 58 2009-06-02T21:41:59Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggy2.png|Debbislug]] <br /> ''Um den Finger gewickelt''</div> Wer glaubt, dass mit dem Unslung das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht. So hat es nicht lange gedauert, bis eine spezielle Version für unsere geliebte Schnecke erhältlich gewesen ist. Nun kann ein Debian Etch auf der Slug installiert werden. Hierzu gibt es zwei Varianten, die erhältlich sind. Zum einen die reine Debian Variante ohne proprietären Treiber für den NSLU2 IXP4xx Netzwerkchip. Hier muss dann ein externer USB Netzwerkadapter verwendet werden. Desweiteren gibt es ein unofficial Pakage mit dem Treibermodul um eben den internen Netzwerkchip in Betrieb nehmen zu können. Aber egal was Ihr verwendet, die Installation sieht bei beiden Varianten gleich aus. Ihr installiert die Debian Firmware und loggt Euch via ssh ein. Dort wartet auch schon der Installer, der Euch durch den zugegeben etwas langwierigen Installationsprozess führt. Ihr werdet dort ein Basissystem installieren. Ebenso legt Ihr dann dort das Root-Passwort fest und erstellt einen ersten User. Bereits hier könnt Ihr schon Pakete für einen Webserver auswählen. Nachdem das System die Installation durchgeführt hat wird die Slug neu booten und ein Debianserver Euch beim nächsten Login begrüßen. Hierbei müsst ihr folgendes beachten: Die Debian Slug hat nachher keinen Webadmin mehr. Ebenso wird kein Samba Server von Haus aus installiert sein. Dieser muss dann neu eingerichtet werden, sollte dieser auf der Debian Slug benötigt werden. Erwartet zudem keine Geschwindigkeitsrekorde. Die Debianinstallation sollte von daher nur für eine Aufgabe verwendet werden (Firewall, FTP, Downloadbüchse etc.), denn die 32 MB Ram werden von Haus aus nur noch 10 bis 11 MB freien Speicher zur Verfügung stellen, wenn einmal das Basissystem gebootet hat. Versteht die Debian Installation als Bastelgerät mit dem Ihr einfach Spaß haben wollt. ==Vorbereitung== Bevor Ihr allerdings mit der Installation loslegt solltet Ihr auf alle Fälle Eure Slug richtig im Webadmin konfiguriert haben. Die gewünschte IP Adresse und der Gateway muss eingetragen sein. Diese Werte übernimmt der Debianinstaller entsprechend. Ladet nun die gewünschte Debianfirmware herunter: '''Debian (free), di-nslu2.bin''' [http://ftp.de.debian.org/debian/dist...xp4xx/netboot/] '''Debian (mit IXP4xx Netzwerkmodule für die Slug)''' [http://www.slug-firmware.net/d-dls.php] Flashen der Firmware: ==='''Möglichkeit A)'''=== Hier könnt Ihr die '''di-nslu2.bin''' über den Webadmin hochladen. Gebt dazu den genauen Speicherplatz des Images an: [[Bild:debian_slug01.png]] Nächstes erhaltet Ihr die obligatorische Sicherheitsabfrage: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:debian_slug02.png.png]]</div> Danach kann es eine kurze Weile dauern, bis das Eeprom geflasht wird. Ihr erkennt das an der Slug, dass nun das Power-LED Rot / Grün blinkt. Unterbrecht diesen Vorgang auf keinen Fall. Ein vorzeitiges Abbrechen kann die NSLU2 erstmal für Euch unerreichbar machen. Zudem kann es leider vorkommen, dass das Update mit einem Fehler abbricht (bad file Format). Versucht es dann eventuell mit einem anderen Browser. Sollte auch das nicht fruchten, so fahrt spätestens dann mit der Variante B fort: ==='''Möglichkeit B)'''=== Das meine ich ist der etwas einfachere Weg und geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> '' (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2)'' Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet. Jetzt sind wir soweit und können mit der Installation loslegen: ==Debian installieren== Steckt an den ersten Port Eure USB Platte an und startet die Kiste neu, damit sicher gestellt ist, dass die Platte einsatzbereit ist. Danach verbindet Ihr Euch über ssh mit der Slug: <code><pre>ssh installer@xxx.xxx.xxx.xxx (IP der Slug)</pre></code> Das Passwort lautet '''install''' . Ihr solltet nun folgende Anzeige bekommen: [[Bild:debian_slug03.png]] Hier wählt Ihr dann "'''Start Menu'''" aus. Im nächsten Menü dann die korrekte Ländereinstellung: [[Bild:debian_slug04.png]] Wählt dann einen Spiegelserver aus, von dem weitere Installationspakete nachgeladen werden sollen: [[Bild:debian_slug05.png]] Einen Proxy brauchen wir nicht zwingend auswählen, außer Ihr verwendet einen: [[Bild:debian_slug06.png]] Falls nicht, lasst das Eingabefeld leer und fahrt mit '''continue''' fort. Nun bekommt Ihr ein Auswahlmenü für diverse Module, die geladen werden können: [[Bild:debian_slug07.png]] Notwendig für die Installation auf eine USB Platte sind folgende Module: * partman-auto: Automatically partition storage devices (partman) * partman-ext3: Add to partman support for ext3 * usb-storage-modules-2.6.18-5-ixp4xx-di: USB storage support Hierbei wird dafür gesorgt, dass das ext3 Format verwendet wird. Ebenso das Modul für die USB Festplatte und der Partman zur Partitionierung der Platte. Jetzt werden einige zusätzliche Komponenten geladen: [[Bild:debian_slug08.png]] Danach wird das Partitionierungsprogramm gestartet: [[Bild:debian_slug09.png]] An der Stelle könnt Ihr die Vorgabe des Systems verwenden (guided) oder auch per Hand (manual) einstellen: [[Bild:debian_slug10.png]] Da wir die komplette Platte für unser Slug verwenden wollen können wir ruhig den guided Modus verwenden. Wählt dazu Eure Festplatte aus, die an der Stelle angezeigt werden sollte: [[Bild:debian_slug11.png]] Im nächsten Menü können verschiedene Vorgaben ausgewählt werden. Man kann durchaus die komplette Platte für root verwenden, sofern eh nichts anderes mit der Platte passiert. Anderweitig empfiehlt es sich auch eine getrennte /home Partition einzurichten: [[Bild:debian_slug12.png]] Übernehmt dann die Einstellung mit "'''Finish partitioning and write changes to disk'''" [[Bild:debian_slug13.png]] Eine letzte Sicherheitsabfrage, die Ihr mit "'''yes'''" beantworten könnt: [[Bild:debian_slug14.png]] Die Platte wird dann formatiert (spätestens hier sind alle Daten, die vorher auf dieser Platte waren futsch): [[Bild:debian_slug15.png]] Als nächstes stellt die korrekte Sprache ein: [[Bild:debian_slug16.png]] Die Systemzeit wird eingestellt: [[Bild:debian_slug17.png]] Danach legt Euer Root-Passwort fest: [[Bild:debian_slug18.png]] Das muss noch einmal bestätigt werden: [[Bild:debian_slug19.png]] Jetzt legt Ihr einen ersten Benutzer an: [[Bild:debian_slug20.png]] Der Username für den Account: [[Bild:debian_slug21.png]] Das Passwort: [[Bild:debian_slug22.png]] Und auch nochmal zu bestätigen: [[Bild:debian_slug23.png]] Das Basissystem wird danach installiert, was durchaus einwenig dauern kann: [[Bild:debian_slug24.png]] Der Tasksel zur Auswahl der zu installierenden Software wird gestartet: [[Bild:debian_slug25.png]] Bei der nächsten Abfrage entscheidet Ihr, ob Ihr an der statistischen Erfassung bezüglich der Verwendung der Programmpakete teilnehmen wollt: [[Bild:debian_slug26.png]] Ich empfehle hier erstmal nur das '''Standard System''' zu installieren. Was wir später benötigen können wir immer noch installieren. Zuerst sollten wir nicht zu viel Zeit mit langwierigen Installationsprozessen von Programmen verschwenden, die wir dann schlußendlich doch nicht benötigen. Also lassen wir nur den Menüpunkt "'''Standard System'''" aktiviert und gehen auf '''Continue''': [[Bild:debian_slug27.png]] Jetzt werden die Programme über das Netz nachgezogen. Das kann auch einwenig Zeit in Anspruch nehmen. Gönnt Euch hier zwischenzeitlich ruhig einen Tee und vielleicht eine netten Film auf DVD ;-) [[Bild:debian_slug28.png]] Wenn das geschafft ist, wird das System zum Reboot vorbereitet: [[Bild:debian_slug29.png]] Das finale Bild: [[Bild:debian_slug30.png]] Startet das System dann mit "'''continue'''" neu durch. Der Bootvorgang dauert einwenig, aber wenn Ihr die Slug 3x piepsen hört könnt Ihr Euch nun via ssh auf Euren Server einloggen. Der Zugang geht dann entweder über "root" mit Eurem festgelegten Passwort oder mittels Eurem ersten Standard- User. Glückwunsch! Ihr habt jetzt ein waschechtes Debian auf der Slug laufen! Von hier aus könnt Ihr als erfahrene Linux Administratoren dann schalten und walten was unsere liebe Schnecke so hergibt. 82d37418fbcbf563a416befcf912046102fe7028 Datei:Debian slug01.png 6 50 59 2009-06-02T21:40:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Sluggy2.png 6 51 61 2009-06-02T21:42:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug02.png.png 6 52 62 2009-06-02T21:42:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug03.png 6 53 63 2009-06-02T21:43:16Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug04.png 6 54 64 2009-06-02T21:43:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug05.png 6 55 65 2009-06-02T21:43:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug06.png 6 56 66 2009-06-02T21:44:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug07.png 6 57 67 2009-06-02T21:44:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug08.png 6 58 68 2009-06-02T21:45:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug09.png 6 59 69 2009-06-02T21:45:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug10.png 6 60 70 2009-06-02T21:46:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug11.png 6 61 71 2009-06-02T21:46:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug12.png 6 62 72 2009-06-02T21:46:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug13.png 6 63 73 2009-06-02T21:47:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug14.png 6 64 74 2009-06-02T21:47:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug15.png 6 65 75 2009-06-02T21:47:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug16.png 6 66 76 2009-06-02T21:48:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug17.png 6 67 77 2009-06-02T21:48:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug18.png 6 68 78 2009-06-02T21:48:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug19.png 6 69 79 2009-06-02T21:49:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug20.png 6 70 80 2009-06-02T21:49:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug21.png 6 71 81 2009-06-02T21:49:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug22.png 6 72 82 2009-06-02T21:50:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug23.png 6 73 83 2009-06-02T21:50:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug24.png 6 74 84 2009-06-02T21:50:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug25.png 6 75 85 2009-06-02T21:51:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug26.png 6 76 86 2009-06-02T21:51:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug27.png 6 77 87 2009-06-02T21:52:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug28.png 6 78 88 2009-06-02T21:53:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug29.png 6 79 89 2009-06-02T21:53:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian slug30.png 6 80 90 2009-06-02T21:53:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Disc Spindown 0 81 91 2009-06-02T21:54:39Z Admin 1 Die Seite wurde neu angelegt: „==Festplatten in den Ruhemodus versetzen (spin-down)== Nachdem Klimaschutz und Energiesparen in aller Munde ist, sollten wir uns auch Gedanken um den Stromverbra...“ wikitext text/x-wiki ==Festplatten in den Ruhemodus versetzen (spin-down)== Nachdem Klimaschutz und Energiesparen in aller Munde ist, sollten wir uns auch Gedanken um den Stromverbrauch unseres Mini-Servers machen. Unsere externe Platte soll nun nach einer gewissen Zeit in den Ruhemodus versetzt werden und herunterfahren '''(spin-down)'''. Wenn die Maschine wieder einen Zugriff von außen bekommt soll die Platte wieder hochfahren '''(spin-up)'''. Nur ist es leider nicht so einfach, den Stromsparmodus zu aktivieren und es existieren sehr viele Ansätze, die teilweise funktionieren, aber oft viel Konfigurationsarbeit voraussetzen. Wenn man sich durch diverse Anleitungen arbeitet, gibt es im Grunde drei Wege, die zum gewünschten Ziel führen: '''a)''' Die Harddisk beherrscht das Herunterfahren von sich aus<br /> '''b)''' Wir geben das Timeout der Platte von außen mit<br /> '''c)''' Die NSLU2 wird softwareseitig über Scripte gesteuert<br /> Ich möchte auf das alles nicht wirklich recht tief eingehen, denn im Netz finden sich entsprechende Anleitung. Ich möchte hier nur meinen Ansatz vorstellen, der auf der 2. Basis (Timeout von außen) basiert und recht einfach umzusetzen ist, wenn die Randbedingungen stimmen. '''a) Die Harddisk beherrscht das Herunterfahren von sich aus''' Mache Festplatten oder fertige USB Lösungen haben bereits ein vorprogrammiertes Powermanagement. D.h. sie drehen nach einer gewissen Zeit der Inaktivität herunter oder schalten sich ab. Empfohlen hierfür wird gerne die USB-Box "One Touch"[http://www.maxtorsolutions.com/en/ToolBox/Product_Grid/index.html] von Maxtor. Zudem bieten manche Hersteller Tools zum Einstellen ihrer Festplatten an, wie Hitachi mit ihrem "Feature Tool"[http://www.hitachigst.com/hdd/support/download.htm]. Diese Lösung hat allerdings leider bei mir auf zwei verschiedenen IBM/Hitachi nicht funktioniert. '''b) Wir geben das Timeout der Platte von außen mit''' Unter Linux bietet sich das Tool hdparm zum Regulieren des Spin-Downs an. Hierzu kann man die USB Box öffnen und steckt die Disk an einem IDE-Kabel direkt an seinem Rechner an und schaltet die Box an. Danach bootet man Linux und holt sich die Rootrechte an einer Konsole: <code><pre>su</pre></code> [PASSWORT EINGEBEN] Dann setzen wir den Spin-Down fest: <code><pre>hdparm -k1 -K1 -S120 /dev/hda</pre></code> Für /dev/hda nehmen wir entsprechend unserer angeschlossenen Platte das korrekte Device: Primary Master: '''hda'''<br /> Primary Slave: '''hdb'''<br /> Secondary Master: '''hdc'''<br /> Secondary Slave: '''hdd'''<br /> -S120 legt die Zeit auf 10 Minuten fest. Zum Testen kann man den Wert auch auf 10 Sekunden ( -S10 ) festlegen. Die Parameter -k1 und -K1 versuchen den Wert in die Festplatte dauerhaft zu schreiben, damit nachdem man die Kiste vom Stromnetz genommen hat sich auch noch an den Spin-Down Timer erinnert. Das klappt aber leider nur in den wenigsten Fällen. Von daher muss die Platte im laufenden Betrieb vom IDE Kabel gezogen werden und darf nicht abgeschalten werden. Dann wird der interne IDE Anschluss der USB Box wieder angeschlossen und an die NSLU2 gestöpselt. Schaltet man die Festplatte ab, so muss dieser Vorgang wiederholt werden. Das ist nicht wirklich komfortabel, aber bringt fast immer den gewünschten Erfolg. Da man eigentlich keine IDE-Platte vom laufenden Rechner trennen sollte (der Controller könnte einem das übel nehmen) empfehle ich eine andere Variante: Hierzu benötigt man eine SATA Platte und ein USB Gehäuse für SATA Platten, das sowohl einen SATA Anschluss als auch USB Anschluss mitbringt. Da SATA hotplugfähig ist, kann das Kabel relativ gefahrlos gezogen werden. Ich habe an meinen zweiten SATA Controller meines Mainboards das der USB Box beiliegende Slotblech (SATA Bracket) für einen externen SATA Anschluss angeschlossen. So kann ich die SATA Platte nun via meines SIL Controllers erstmal an meinen Rechner bringen, ohne dass ich das USB Gehäuse aufschrauben und irgendwelche Kabel trennen muss. Ich stecke einfach die Platte im laufenden Linuxbetrieb an und checke erstmal, ob diese erkannt wurde, indem ich folgenden Befehl an der Konsole absetze: <code><pre>dmesg</pre></code> Hier sehe ich auch gleich, als welches Gerät (Device) die Platte erkannt wurde. Dies wird in der Regel /dev/sd... sein. Nun kann ich mittels hdparm den gewünschten Spin-down Timer einstellen: <code><pre>hdparm -k1 -K1 -S120 /dev/sd...</pre></code> Dann ziehe ich einfach den SATA Anschluss ab und stecke den USB-Anschluss wieder an die NSLU2. Die Platte merkt sich nun solange dieses Setting bis das Gerät vom Strom getrennt wird. Damit das natürlich einfach und schnell zu bewerkstelligen ist sollte die NSLU2 nebst USB Platte in der Nähe des stationären Rechners stehen. Das empfiehlt sich auch deswegen, da man auch schnell mal die Harddisk über die SATA Schnittstelle mit größeren Datenpaketen füttern kann. Ansonsten bestünde noch die Möglichkeit dies mittels eines Notebooks zu erledigen, das einen externen SATA Anschluss hat (fertig eingebaut oder via PCMCIA Controller). Hier mein Setup mit einem SATA2 USB-Gehäuse, das beide Schnittstellen bereit hält: [[Bild:slug17.jpg|center]] '''c) Die NSLU2 wird softwareseitig über Scripte gesteuert''' Diverse Scripte, die die Box intern steuern können findet Ihr unter folgendem Link: NSLU2-Linux - FAQ / SpinDownUSBHarddisks [http://www.nslu2-linux.org/wiki/FAQ/SpinDownUSBHarddisks] Hier sei nur gesagt, dass das Setup teilweise nicht trivial ist und einiges an Experimentierfreude voraussetzt. '''Hinweis:''' Der Spin-Down der Platte funktioniert natürlich erst dann, sobald kein Zugriff auf die Platte erfolgt. Hier muss dafür gesorgt werden, dass etwaige Prozesse nicht auf die Platte greifen. Zu überlegen ist hierbei, das OS auf einen USB-Stick zu unslingen und die Platte nur als Datenträger der Homeverzeichnisse zu verwenden. 28e16f5192a9682ea899de05491a449f8abf0841 Datei:Slug17.jpg 6 82 92 2009-06-02T21:55:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Overclocking 0 83 93 2009-06-02T21:55:59Z Admin 1 Die Seite wurde neu angelegt: „==Phönix aus der Asche ... oder mehr Power== '''HINWEIS/UPDATE: Neue Geräte werden bereits mit der 266MHz Taktung ausgeliefert. Hier ist dieser Schritt nicht m...“ wikitext text/x-wiki ==Phönix aus der Asche ... oder mehr Power== '''HINWEIS/UPDATE: Neue Geräte werden bereits mit der 266MHz Taktung ausgeliefert. Hier ist dieser Schritt nicht mehr notwendig!''' Nachdem ich im Netz einwenig recherchiert habe, habe ich herausgefunden, dass man durch einen kleinen Overclocker-Trick die NSLU2 merklich beschleunigen kann. Verbaut wurde eine 133MHz Intel ARM-CPU (XScale), die allerdings komischerweise laut der machbaren Spezifikation im Grunde nur auf halben Coretakt läuft. Möglich und ausgelegt ist die CPU auf 266 MHz. Durch einen kleinen Eingriff in das Gerät, kann die Sperre aufgehoben werden. Dazu muss das Gerät geöffnet und ein kleiner Widerstand entfernt werden. '''Hinweis:''' Dadurch geht die Garantie verloren. Ebenso sind technische Defekte nicht auszuschließen, die eventuell auch Schäden anrichten können! Allerdings erhöht sich angeblich dadurch der Chip nicht merklich an Temperatur, bzw. die verbrauchte Leistung ist nicht wesentlich höher. Hier das geöffnete Gerät und lokalisierter Widerstand: [[Bild:slug18.jpg|center]] Man kann den Widerstand auslöten (dazu benötigt man feines Werkzeug) oder man schneidet ihn mit einen scharfen Messer vorsichtig durch: [[Bild:slug19.jpg|center]] Bitte testet das Gerät nochmal genau durch, ob alle Funktionen erhalten geblieben sind. Bei mir hat das soweit wunderbar funktioniert. Das muss aber nicht bedeuten, dass es überall so läuft! Also wie gesagt: Nur auf eigene Gefahr und die Garantie des Gerätes ist damit definitiv futsch! Um nun sicher zu gehen, dass die Slug auch mit 266MHz taktet, kann man sich die BogoMIPS anzeigen lassen. Das passt zwar nicht haargenau, aber zeigt, dass der Takt nun entsprechend angehoben ist: <code><pre>root@Hellboy:/>cat /proc/cpuinfo Processor : XScale-IXP425/IXC1100 rev 1 (v5b) BogoMIPS : 263.78 Features : swp half thumb fastmult edsp Hardware : Intel IXDP425 Development Platform Revision : 0000 Serial : 0000000000000000</pre></code> Das Datenblatt zum XScale-IXP425 kann bei Intel hier eingesehen werden [http://www.intel.com/design/network/manuals/252480.htm] Dort steht es als downloadbares pdf-Dokument offen zur Verfügung. 03337b6c974d394b8ed41afa032fdafe6b37d368 Datei:Slug18.jpg 6 84 94 2009-06-02T21:56:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Slug19.jpg 6 85 95 2009-06-02T21:56:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Sidebar 8 3 96 31 2009-06-02T21:59:21Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren * SEARCH * TOOLBOX * LANGUAGES 0b05ce4373a1ca2ee0a8c2f3fa37033e9fcf14f9 Server im Eigenbau 0 86 97 2009-06-02T22:00:43Z Admin 1 Die Seite wurde neu angelegt: „<div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt1.jpg|Serverprojekt]] <br /> ''Die Komponenten''</div> <div style="float:right;t...“ wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt1.jpg|Serverprojekt]] <br /> ''Die Komponenten''</div> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:serverprojekt20.jpg|Notebookplatte]] <br /> ''Eine Notebookplatte von Samsung''</div> Nachdem meine Slugs entsprechend betagt sind und doch der eine oder andere Serverdienst einwenig mehr Power benötigt, war meine Überlegung, einen eigenen neuen Miniserver zu bauen. Derzeit sind die intel Atom Prozessoren recht günstig zu haben und als sparsam einzustufen, was den Stromverbrauch betrifft. Also habe ich mir ein intel Atom Board mit einer 270er CPU (1,6 GHz) zugelegt. Dazu ein Mini ITX Gehäuse mit einem externen Netzteil.<br> <br> Als Speicher verwende ich 2GB Speicher aus dem Hause OCZ, die ordentlich Luft für all die Dienste bieten. Das Zusammenbauen des Servers verlangt einwenig Geduld, da im Mini ITX Gehäuse nicht viel Platz für entsprechende Manövrierungen des Mainboards ist.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08.jpg|Platine ist eingebaut]] <br /> ''Das Board ist eingebaut''</div> Nach ein paar Versuchen sitzt das Board dann im Gehäuse und die Komponenten können normalerweise schon verbunden werden.<br> <br> Allerdings ist zu bedenken, dass der kleine Lüfter, der nicht die CPU sondern den Chipsatz kühlt, doch etwas lauter im Betrieb ist. Wer dann den Server, wie ich es vor habe, daheim im Wohnzimmer oder verbaut im Flur stehen hat, möchte natürlich nicht, dass er von einem läremnden Lüfter auf Dauer gestört wird.<br> <br> Deswegen habe ich mir noch einen kleinen Austauschlüfter besorgt (Mini-Kaze 400mm), der deutlich leiser arbeitet. Wenn natürlich alles ruhig ist, dann kann man auch diesen hören, macht aber dennoch einen deutlichen Unterschied in der Geräuschentwicklung.<br> <br> zudem habe ich noch eine kleine Notebookfestplatte aus dem Hause Samsung mit einer Kapazität von 320GB verbaut. Die Platte ist zum einen sehr leise, preislich günstig und entwickelt keine allzu große Abwärme. Das Thema Wärme ist auf jeden Fall zu beachten. Von daher habe ich noch einen Revoltec Gehäuselüfter angebracht, der die warme Luft aus dem Rechner nach außen transportiert. <br> <br> Ebenso sei anzumerken, dass die Platine einen 12Volt Anschluss besitzt, der auch verwendet werden muss. Zu diesem Zwecke habe ich einen Adapter von 12 Volt Molex auf den 4Pin Anschluss des Mainboards verwendet, über den dann auch der Rechner schließlich startet. Die zusätzlichen Komponetnen wären also Lüfter und einen Adapter, die ich noch hinzukaufen musste:<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt11.jpg|Lüfter und Adapter]] <br /> ''Lüfter und Adapter''</div> <br> Nachdem ich hier ein paar Tests gefahren habe lief der Mini-Server soweit ohne Probleme an. Die SATA Platte wurde ordentlich vom Bios erkannt und ich konnte hier schon einwenig sehen, wie die Temperaturentwicklung in dem Gehäuse aussieht. Da die CPU passiv gekühlt ist darf man natürlich in solchen kleinen Gehäusen keine Temperaturen erwarten, wie man sie normalerweise von seinem Desktop Rechner her kennt.<br> <br> Über ein externes DVD Laufwerk startete ich dann eine 64bit Debian Linux Netinstall CD und der Kernel wurde ohne Probleme geladen. Die Distribution lief auch relativ sauber durch. Ich hatte nur einwenig Schwierigkeiten beim Netzwerkchip. Hier wollte zunächst Lenny keine Netzwerkverbindung aufbauen. Nach einem Neustart ging es dann allerdings. Was ich dabei herausgefunden habe war, dass es mit dem Kernel eine 50:50 Sache war, dass der Netzwerkcontroller funktionierte. Somit mein Tipp: In so einem Fall eben so oft starten, bis eine Netzverbindung steht.<br> <br> Dieser Effekt trat bei meinem Board allerdings nur mit der 64bit Variante auf. Die 32bit Version ging soweit ohne Probleme. Auf der 64bit Basis ist das Problem mit einem neueren Kernel dann behoben. Hier empfiehlt sich umbedingt, einen neuen Kern zu installieren bzw. selbst zu kompilieren.<br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:serverprojekt17.jpg|Installation]] <br /> ''Installation im Nähzimmer''</div> Der Server musste dann noch ein paar Tests durchmachen. Zudem war es hier interessant zu sehen, wie sich die Maschine nach einiger Zeit in der Wärmeentwickung verhält. Hier muss ich sagen änderte sich nach einigen Stunden Laufzeit die Temperatur kaum. Da die CPU aber auch kein Throttling beherscht bleibt auch die Abwärme relativ konstant, wenn der Prozessor seine Betriebstemperatur erreicht hat.<br> <br> Natürlich muss noch die Secure-Shell installiert werden, damit man die Kiste irgendwann von der Tastatur und dem Monitor abklemmen kann. Nachdem ich einen neuen Kernel kompiliert und installiert habe, der auch stabil zwei Tage durchgelaufen ist war es dann soweit. Der Rechner wurde abgebaut und zu meinen Telefongerätschaften in den Schrank im Flur gestellt und dort direkt an meinen Router angeschlossen.<br> <br> Der Datendurchsatz wurde dadurch auch besser, da zu Testzwecken eine Verbindung nur über WLan (aus dem Nähzimmer) möglich war. Die Temperatur stieg allerdings dann im Schrank um ein paar Grad an, da der Luftstrom natürlich etwas eingeschränkt ist. Die Stabilität hat aber bislang nicht darunter gelitten. Ebenso erreicht die Festplatte auch keine kritische Temperatur und bleibt in der Regel um die 38°C.<br> <br> Um die komplette Anlage (DSL Modem, NTBA, Telefon und Server) vor einem Stromausfall zu schützen habe ich noch eine USV angeschlossen, die in solchen Fällen das System puffert und mit Strom versorgt. Das komplette Setup (3 x Slug, Mini Server, DSL Modem/Router und ISDN Telefon) verbraucht nun ca. 60 Watt. Wobei rund 40 Watt an den Mini- Server gehen. Der Stromverbrauch könnte noch geringer sein, da der Chipsatz hier noch am meisten Strom zieht. Es ist davon auszugehen, dass es in absehbarer Zeit sparsamere Chipsätze gibt.<br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:Schuhschrank3.jpg|Schrank]] <br /> ''Cowboys im Schuhschrank''</div> Der Rechner beherbergt nun einen Apache Webserver mit php und mysql. Zudem einen imap-Server (Dovecot) und einen ioquake3 Spieleserver. Für ftp ist der proftp zuständig und als MTA exim 4. Der Server ist soweit kaum wirklich ausgelastet, also hat ordentlich Luft für all diese Aufgaben.<br> <br> Das Gerät arbeitet soweit zuverlässig und stabil Einen Absturz oder Aufhänger hatte ich bislang noch nicht. Selbst die Dienste selbst scheinen soweit stabil zu laufen. Hier ist auch anzumerken, dass bei sowas auch ein Markenspeicher verwendet werden sollte. Ein Speicher, der nicht sauber arbeitet kan einem schier zur Verzweiflung bringen, da eine langwierige Fehlersuch im Bereich der installierten Software kaum zu einem Ergebnis führt.<br> <br> Der Server wird über einen Cronjob täglich aktualisiert und ebenso der ioquake3 Server wird automatisch neu kompiliert, sollte auf dem SVN Tree ein neuer Quellcode vorhanden sein. Entsprechende Tutorials hierzu finden sich bereits hier auf der Page, bzw. werden noch folgen.<br> <br> Neben der täglichen Aktualisierung und den regelmäßigen Kernelupdates (derzeit wird jeder neue Vanilla Kernel hierauf neu übersetzt und installiert) wird der Rechner über iptables und fail2ban gesichert. Da der Server ständig am Netz hängt ist es durchaus sinnvoll, über ein derartiges Konzept nachzudenken. Zudem haben wir noch die Hardwarefirewall, die zumindest eingehenden Traffic entsprechend filtert, bzw. unterbindet.<br> <br> fd94d075cbf6298faec8de67e94641ff8216e55c Datei:Serverprojekt1.jpg 6 87 98 2009-06-02T22:01:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Serverprojekt20.jpg 6 88 99 2009-06-02T22:02:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Serverprojekt08.jpg 6 89 100 2009-06-02T22:03:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Serverprojekt11.jpg 6 90 101 2009-06-02T22:03:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Serverprojekt17.jpg 6 91 102 2009-06-02T22:04:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Schuhschrank3.jpg 6 92 103 2009-06-02T22:06:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian Kernel kompilieren 0 93 104 2009-06-02T22:07:04Z Admin 1 Die Seite wurde neu angelegt: „Nun läuft ein selbstkompilierter 2.6.28.3er Kernel (64bit) bei mir. Der Versionssprung von 2.6.26 auf den 28er ist relativ groß. Von daher habe ich erstmal eine...“ wikitext text/x-wiki Nun läuft ein selbstkompilierter 2.6.28.3er Kernel (64bit) bei mir. Der Versionssprung von 2.6.26 auf den 28er ist relativ groß. Von daher habe ich erstmal einen fertigen Kernel installiert und auf Basis diesen einen neuen Kernel gebaut. Hier mal die einzelnen Schritte:<br> <br> Zuerst fügen wir ein neues Softwarerepository hinzu: <code><pre>nano /etc/apt/sources.list</pre></code> Dort dann folgende Zeile einfügen: <code><pre>deb http://kernel-archive.buildserver.net/debian-kernel/ trunk main</pre></code> Danach den Key importieren: <code><pre>wget -q -O - http://kernel-archive.buildserver.net/key | apt-key add -</pre></code> Wir frischen die Softwareliste auf: <code><pre>apt-get update</pre></code> und installieren einen neuen Kernel: <code><pre>apt-get install linux-image-2.6.28-1-amd64</pre></code> Nun können wir das Repository wieder deaktivieren. Dazu in der '''/etc/apt/sources.list''' die gerade hinzugefügte Zeile mit einem '''#''' auskommentieren. Dann nochmal ein <code><pre>apt-get update</pre></code> fahren. Danach die Kiste neu starten. Jetzt lasst den Rechner mit dem neuen 2.6.28er Kernel hochfahren.<br> <br> Danach installiert nun folgende Pakete: <code><pre>apt-get install kernel-package libncurses5-dev build-essential mc wget zlib1g-dev</pre></code> Jetzt geht wie gewohnt vor. Für den 2.6.28.3er Kernel sieht das dann so aus (für die jeweilige Kernelversion die Versionsnummer anpassen): <code><pre>cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.3.tar.bz2 tar xvfj linux-2.6.28.3.tar.bz2 ln -s linux-2.6.28.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre>make menuconfig</pre></code> Dann weiter mit <code><pre>make-kpkg --initrd kernel_image --revision KernelRebuild.01 cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre>dpkg -i kernel-image-2.6.28.3_KernelRebuild.01_amd64.deb</pre></code> Rechner neu starten.<br> <br> Auf dem Atom kann das allerdings seine Zeit dauern. Von daher plant mal 2 bis 3 Stunden Zeit ein. Demzufolge empfiehlt es sich, den '''make-kpkg''' innerhalb einer '''screen''' Session laufen zu lassen, wenn alles über einen ssh login passiert.<br> <br> Wenn alles gut gelaufen ist, dann startet der Rechner durch und Ihr könnt Euch den neuen Kernel anzeigen lassen: <code><pre>uname -a Linux homeserver 2.6.28.3.gargi #1 SMP Mon Feb 2 21:38:12 CET 2009 x86_64 GNU/Linux</pre></code> cu<br> Gargi 29dc8c82cf54da7f11df0f5b4479afe34beb2cfe Proftp installieren 0 94 105 2009-06-02T22:07:51Z Admin 1 Die Seite wurde neu angelegt: „==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr...“ wikitext text/x-wiki ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch die proftpd.conf bearbeiten. Unter Debian Sarge befindet diese sich im Verzeichnis '''/etc'''. Bei Etch und Lenny im Verzeichnis '''/etc/proftpd'''.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> cu<br> Gargi ac33b60321dc42e9efd75a4e7ba81eae6e551c80 MediaWiki:Sidebar 8 3 106 96 2009-06-02T22:09:05Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL * SEARCH * TOOLBOX * LANGUAGES f62c156719856678c649f5a8ab2062128ba2602b 109 106 2009-06-02T22:11:56Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren * SEARCH * TOOLBOX * LANGUAGES 3d50cf95ebecc5ff97e0f347b94b650bfb0eb123 115 109 2009-06-02T22:14:56Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban * SEARCH * TOOLBOX * LANGUAGES a369cb30378556de22925e7f71e69bb92a679501 117 115 2009-06-02T22:16:37Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter * SEARCH * TOOLBOX * LANGUAGES 6d69c8675703a13e52dd7d5a01e29d3b59c2f22e 120 117 2009-06-02T22:19:21Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service * SEARCH * TOOLBOX * LANGUAGES 4078efd67be5f220e692a7a4f2c3a23b85e98e20 128 120 2009-06-02T22:23:34Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * SEARCH * TOOLBOX * LANGUAGES e374521d36f0b7f5cf1a3fabe6805a1953b08a6b 130 128 2009-06-02T22:27:44Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 03fc7e8270c7211270b8088b758a09c51cb50143 Apache, PHP und mySQL 0 95 107 2009-06-02T22:09:45Z Admin 1 Die Seite wurde neu angelegt: „==Apache 2 mit php5 installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2...“ wikitext text/x-wiki ==Apache 2 mit php5 installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis:<br> <br> '''/etc/apache2/'''<br> <br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>etc/init.d/apache2 restart</pre></code> <br> <br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> Mit einem <code><pre>mysqladmin -p create tabelle01</pre></code> legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre> Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped </pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> ''phpinfo.php'' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br> <br> ==Eaccelerator installieren== Um nun den Aufruf etwas zu beschleunigen installieren wir noch ein Cachesystem, den eAccelerator. Dieser muss allerdings von Grund auf neu kompiliert werden. Installiert deswegen zuerst folgende Komponenten, die Ihr für den Compile benötigt: <code><pre>apt-get install bzip2 build-essential php5-dev</pre></code> Jetzt legen wir unter dem Hauptverzeichnis ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> wir wechseln dahin: <code><pre>cd work</pre></code> Danach holen wir uns die aktuelle Version (Bitte auf der eaccelerator Projektseite nach der aktuellen Versionsnummer schauen): <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> Danach wird ausgepackt: <code><pre>tar xvfj eaccelerator-0.9.5.3.tar.bz2</pre></code> Und in das korrekte Verzeichnis gewechselt: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Danach bereiten wir den Compile vor: <code><pre> phpize ./configure --with-eaccelerator-userid=nobody </pre></code> Kompilieren: <code><pre>make</pre></code> Installieren: <code><pre>make install</pre></code> Wir müssen nun die eaccelerator.ini anlegen: <code><pre>touch /etc/php5/conf.d/eaccelerator.ini</pre></code> Füllt diese Datei mit Eurem präferierten Editor mit folgendem Inhalt: <code><pre>extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/var/cache/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"</pre></code> Danach müssen wir noch das Verzeichnis anlegen, in dem gecacht werden soll. Dieses ist in der eaccelerator.ini vorgegeben: <code><pre>mkdir -p /var/cache/eaccelerator</pre></code> Danach müssen noch die Zugriffsrechte neu geregelt werden: <code><pre>chmod 0777 /var/cache/eaccelerator</pre></code> Startet den Apache nun neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Damit wir testen können, ob der eaccelerator und alle anderen sonstigen Dienste laufen, schauen wir uns nochmal die phpinfo.php an. Wenn der eaccelerator läuft seht Ihr folgenden Abschnitt:<br> [[Bild:eac.jpg|eaccelerator]]<br> Bitte beachtet, dass Ihr den eAccelerator jedes Mal neu kompilieren müsst, sobald eine neue php Version installiert wird, da es sonst zu Versionskonflikten kommt und der Apache Webserver nicht startet. Wenn Ihr keinen Zugriff nach einem php Update habt, dann schaut Euch die '''/var/log/apache2/error.log''' an, dort wird in der Regel ein entsprechender Hinweis zu finden sein. Um einen neuen Kompile zu starten muss vorher das Entwicklerverzeichnis aufgeräumt werden. Also in Eurem eAccelerator Work Verzeichnis ein <code><pre>make clean</pre></code> ausführen. Danach die Prozedur wie oben beschrieben und dann den Apache neu starten: <code><pre>/etc/init.d/apache2 restart</pre></code><br> Damit wäre der Webserver soweit eingerichtet. <br> <br> f6f98103c5ff0fa34ee22a35e0b7f82bf5cd1b73 Datei:Eac.jpg 6 96 108 2009-06-02T22:10:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Phpmyadmin installieren 0 97 110 2009-06-02T22:12:23Z Admin 1 Die Seite wurde neu angelegt: „Der [http://www.phpmyadmin.net/home_page/index.php phpmyadmin] ist unter Debian fix installiert. Ich gehe davon aus, dass Ihr bereits einen Apache2, php5 und mysq...“ wikitext text/x-wiki Der [http://www.phpmyadmin.net/home_page/index.php phpmyadmin] ist unter Debian fix installiert. Ich gehe davon aus, dass Ihr bereits einen Apache2, php5 und mysql5 am Laufen habt. Danach setzt als root folgenden Befehl ab: <code><pre>apt-get install phpmyadmin</pre></code> Nach erfolgreicher Installation könnt Ihr den phpmyadmin schon aufrufen. Dazu in Eurem Browser <code><pre>http://meineurl/phpadmin</pre></code> eingeben.<br> <br> Im Grunde könnte man das jetzt auch schon so lassen, nur würde ich nun noch ein paar Dinge umbiegen bzw. ergänzen. Da der phpmyadmin als Standard immer unter /phpmyadmin aufzurufen ist, verleitet es vielleicht mal den einen oder anderen Cracker zu versuchen, darüber an die Datenbank zu kommen. Von daher wäre es ratsam, das Standardverzeichnis umzubenennen und eventuell nochmals über ein htaccess passwortgeschützt zu schalten. Zwar muss man sich über den phpmyadmin auch anmelden, nur wer dann noch den Fail2ban am Laufen hat, der sperrt hier schnell auch die Bruteforce Attacken aus, falls es sich jemand am htaccess versuchen will.<br> <br> Also legen wir noch ein htaccess Login an und verstellen die Standard-URL.<br> <br> '''Standard URL ändern:'''<br> <br> Der phpmyadmin wird nicht einfach in einem neuen Unterverzeichnis im Dokumenten Root des Apache abgelegt, sondern findet sich innerhalb /usr/share/phpmyadmin . Damit der Apache das entsprechend umlinkt muss das auch in einer eigenen Konfig festgelegt werden. Deswegen müsst Ihr zunächst diese editieren: <code><pre>nano /etc/apache2/conf.d/phpmyadmin.conf</pre></code> Der Alias muss entsprechend Euren Vorstellungen geändert werden: <code><pre># phpMyAdmin default Apache configuration Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options Indexes FollowSymLinks [...]</pre></code> Z.b. in "'''meinedatenbank'''" . Das würde dann so aussehen: <code><pre># phpMyAdmin default Apache configuration Alias /meinedatenbank /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options Indexes FollowSymLinks [...]</pre></code> Startet den Apache neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Nun könnt Ihr phpmyadmin z.B. mit <code><pre>http://meineurl/meinedatenbank</pre></code> aufrufen.<br> <br> '''htaccess hinzufügen:'''<br> <br> Hierfür muss wieder die phpmyadmin.conf angepasst werden: <code><pre>nano /etc/apache2/conf.d/phpmyadmin.conf</pre></code> Fügt nun die '''AllowOverride All''' Zeile ein: <code><pre><Directory /usr/share/phpmyadmin> Options Indexes FollowSymLinks DirectoryIndex index.php AllowOverride All # Authorize for setup <Files setup.php> [...]</pre></code> Wechselt nun in das phpmyadmin Verzeichnis: <code><pre>cd /usr/share/phpmyadmin</pre></code> und legt eine neue Datei an: <code><pre>nano .htaccess</pre></code> und füllt diese gleich mit folgendem Inhalt: <code><pre>AuthType Basic AuthName phpmyadmin AuthUserFile /usr/share/phpmyadmin/.htpasswd require valid-user</pre></code> Jetzt legt die Passwortdatei an: <code><pre>htpasswd -c .htpasswd username</pre></code> ''(für username Euren gewünschten Usernamen)''<br> <br> Danach das Passwort eingeben und bestätigen wenn Ihr abgefragt werdet.<br> <br> '''Sicherheitstipp:''' Ihr könnt die Passwortdatei auch außerhalb des /usr/share/phpmyadmin Verzeichnisses legen, müsst dies aber dann entsprechend auch in der .htaccess angeben.<br> <br> Danach einfach den Apache neu starten: <code><pre>/etc/init.d/apache2 restart</pre></code> Jetzt werdet Ihr erstmal nach einem Login gefragt, bevor Ihr Euch im phpmyadmin anmelden könnt.<br> <br> '''Neuen Datenbankuser mittels phpmyadmin anlegen:'''<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:phpmyadmin_01.jpg|phpmyadmin1]] </div> Es ist ratsam, dass Ihr wenn Ihr später ein CMS, Forum, Blog installiert, nicht über den Root-Account der mysql Datenbank arbeitet, sondern über einen eigenen User. Den könnt Ihr recht einfach selbst unter phpmyadmin anlegen. Loggt Euch dazu als php - root ein und klickt auf der Startseite gleich auf "Rechte" wie hier im linken Bild rot dargestellt wird. <br> <br> An der Stelle könnt Ihr auch für jeden bereits aqngelegten Datenbankuser die Rechte im Naqchgang individuell anpassen.<br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:phpmyadmin_02.jpg|phpmyadmin2]] </div><br> Im unteren Teil der Maske klickt einfach dann auf "Neuen Benutzer hinzufügen". Danach erhaltet Ihr folgende Eingabemöglichkeit in der Ihr den Namen des Nutzers, den Server (normalerweise "localhost") und das neue Passwort des frisch angelegten Users eingebt. Verwendet hierfür kryptische Passwörter (also Buchstaben, Sonderzeichen, Zahlen), da Datenbanken gerne angegriffen werden. <br><br><br> [[Bild:phpmyadmin_03.jpg|phpmyadmin3]]<br> Eine neue Datenbank legen wir mal nicht an, das machen wir später als User.<br> <br> Bei den Rechten wählt folgendes aus:<br> [[Bild:phpmyadmin_04.jpg|phpmyadmin4]]<br> Das dürfte das wichtigste abdecken. <br> <br> Speichert die Einstellungen ab. Nun könnt Ihr Euch als neuer Nutzer einloggen und neue Datenbanken anlegen. Wenn Ihr keine Datenbankenlimitierung habt (was auf einen privaten Server normal nicht der Fall ist), dann empfiehlt es sich auch, für jedes CMS, Blog oder Forum auch eine eigene Datenbank anzulegen. Das ist zum einen übersichtlicher und ressourcenschonender, wenn die Datenbanken mal etwas größer werden sollten.<br> <br> Viele Grüße!<br> Euer<br> Gargi 58cefd30a4fd43d040aef82edb8757b5248f61e7 Datei:Phpmyadmin 01.jpg 6 98 111 2009-06-02T22:12:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Phpmyadmin 02.jpg 6 99 112 2009-06-02T22:12:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Phpmyadmin 03.jpg 6 100 113 2009-06-02T22:13:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Phpmyadmin 04.jpg 6 101 114 2009-06-02T22:13:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Firewalling: iptables und Fail2Ban 0 102 116 2009-06-02T22:15:33Z Admin 1 Die Seite wurde neu angelegt: „==fail2ban auf Debian Lenny installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Ei...“ wikitext text/x-wiki ==fail2ban auf Debian Lenny installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh # script written by Gargi 2009 http://www.gargi.org #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print 41}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> Viele Grüße!<br> Gargi 1ce641e16e038cabbc6c0b63080ed4d5d0d308b9 Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 118 2009-06-02T22:17:07Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|Schema]] <br> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter /'''bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>nano /etc/crontab</pre></code> Aufruf: <code><pre>1 5 * * * root /bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 61cb4154c88eabb9027f51bf82d14bee94d1a7a6 Datei:Mail schema.jpg 6 104 119 2009-06-02T22:17:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Ioquake3 Server und Build Service 0 105 121 2009-06-02T22:19:50Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> ''(Bitte achtet im Script aquf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!)'' <br><br> Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> ''(Bitte achtet im Script aquf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!)'' <br><br> Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos. <br> <br> Pierre "Gargi" Kretschmer ed7172ca557b2955bf66ae4ff300977ac464868f Datei:Orbi.jpg 6 106 122 2009-06-02T22:20:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Rocket kulli.jpg 6 107 123 2009-06-02T22:20:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Gaunt kulli.jpg 6 108 124 2009-06-02T22:21:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Toolchain1.png 6 109 125 2009-06-02T22:21:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Map.png 6 110 126 2009-06-02T22:22:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Q3 kulli.jpg 6 111 127 2009-06-02T22:22:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 F.E.A.R. Dedicated Server auf Linux 0 112 129 2009-06-02T22:24:08Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Der mittlerweile etwas betagte Gruselshooter F.E.A.R. aus dem Hause Sierra hat ein gutes Multiplayermodul, das sich auch heute nach ca. 3 Jahren nach Erscheinen der letzten Version 1.08 großer Beliebtheit erfreut. Zumal das Multiplayermodul F.E.A.R. Combat kostenlos downloadbar ist und somit der Multiplayer Part frei gespielt werden kann. <br><br> Die Installation auf einem Linux Server ist relativ einfach. Die Prozedur auf einem Debian Server (getestet auf meinem intel Atom 270 Server mit einem 64bit Debian 5 , Lenny) ist schnell erledigt. <br><br> Legt einen eigenen User für das Spiel an, da wir den dedicated Server nicht als root laufen lassen wollen. Falls Ihr noch einen anlegen müsst, dann macht das an der Konsole als root <code><pre>adduser meinfear</pre></code> Damit haben wir den User '''meinfear''' generiert und dieser hat sein Homeverzeichnis '''meinfear''' nun unter '''/home'''. <br><br> Jetzt benötigen wir ein paar Pakete, die wir wie folgt installieren können: <code><pre>apt-get install libstdc++5 screen</pre></code> Wenn Ihr ein 64bit System verwendet, dann muss ein Paket mehr rein: <code><pre>apt-get install libstdc++5 ia32-libs screen</pre></code> Nachdem die Pakete im System sind werden wir nun den FEAR Server installieren. Das machen wir als normaler User. Wenn Ihr noch root seid, dann wechselt nun die Userid mit einem: <code><pre>su meinfear</pre></code> und wechselt in sein Homeverzeichnis: <code><pre>cd /home/meinfear</pre></code> Nun können wir den Server herunterladen: <code><pre>wget http://www.1337-server.net/fear/fear-linuxserver-1.08.tar.gz</pre></code> Die Datei entpacken wir: <code><pre>tar -zxvf fear-linuxserver-1.08.tar.gz</pre></code> Nun haben befindet sich in Eurem Homeverzeichnis das neue Verzeichnis '''FEAR'''. Wir wechseln nun dort hin: <code><pre>cd FEAR</pre></code> und können auch schon den Server starten: <code><pre>./start.sh</pre></code> Wenn alles glatt läuft solltet Ihr diese Ausgabe sehen: <code><pre> F.E.A.R. Dedicated Linux Server - Version FEAR v1.08 Copyright (c) 2005 Monolith Productions, Inc. All rights reserved. Initializing... Map Rotation: Asylum Cafeteria Campus Construction Docks Evac Factory HighTech Office Refinery Stockpile WaterWorks Loading world: Worlds\ReleaseMultiplayer\Asylum World loaded. Ready.</pre></code> ==ServerOptions== Der Server läuft nun auf dem Standardport '''27888'''. <br> Wenn Ihr den Gamemode ändern wollt oder auch den Port, dann müsst Ihr das in der Datei '''/FEAR/ServerOptions/ServerOptions.txt '''erledigen. <br><br> Wichtig ist zunächst Folgendes in dieser Datei. <br><br> Sektion '''[ServerSettings]''': <br><br> GameType=DeathMatch ''Legt den Gametype fest (siehe darunterliegende Sektionen)''<br> ServerMessage= ''Eine Meldung, die der Server ausgibt beim Connecten''<br> UsePassword=0 ''0=kein Passwort 1=Passwortgeschützt''<br> Password=password ''Serverpasswort''<br> AllowScmdCommands=0 ''Schaltet Adminkommandos ein''<br> ScmdPassword=password ''Admin Passwort''<br> Port=27888 ''Standardport''<br> ...<br> Dedicated=1 ''0=kein dedicated Server 1= Dedicated Server''<br> ...<br> AllowVoteKick=1 ''Diverse Votingsettings''<br> AllowVoteTeamKick=1<br> AllowVoteBan=1<br> AllowVoteNextRound=1<br> AllowVoteNextMap=1<br> AllowVoteSelectMap=1<br> MinPlayersForVote=5<br> MinPlayersForTeamVote=3<br> VoteLifetime=30<br> VoteBanDuration=60<br> UsePunkBuster=0 ''Punkbuster ja oder nein. 0=nein 1=ja''<br> <br> Die darunterliegenden Sektions nehmen Einstellungen für die einzelnen Spielearten fest, welchen Ihr oben unter GameType festlegt. Ihr solltet auf alle Fälle im jeweiligen Spieletyp Euren Servernamen festlegen, damit dieser im Ingamebrowser später auch eindeutig gefunden werden kann. Den Namen legt Ihr beim Parameter <br><br> '''SessionName='''<br> <br> fest. Wie schon gesagt, den könnt Ihr für jede Spieleart anders nennen, da dieser in jeder einzelnen Sektion festgelegt werden kann. <br><br> ==Speicherzugriffsfehler== Beim Installieren auf meinen Server begrüßte mich der Server zunächst beim Start mit einem Speicherzugriffsfehler (Segmentation fault) und brach ab. Ich dachte zuerst an ein Problem mit der Architektur. Allerdings lag das in meinem Fall an der eingeschalteten Firewall. Wenn Ihr iptables am Laufen habt, dann müssen folgende Ports jeweils UDP und TCP freigeschaltet werden '''27888''' (je nachdem wie Ihr Euren Standardport setzt) und den Port '''27900 '''damit Euer Server gelistet wird. Tragt diese Ports im IN und OUT Eures Scripts ein. Danach sollte der Server starten. <br><br> ==Screen== Wenn Ihr den Server an der Konsole via ssh oder ähnlich startet, dann startet zuerst screen und dann den Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> ==Mehrere Server parallel== Wenn Ihr auf Euren Server mehrere Gamemodi beispielsweise laufen lassen wollt (der Slowmo Deathmatch ist recht schön), dann legt eine weitere ServerOptions Datei an: <code><pre>su meinfear cd /home/meinfear/FEAR/ServerOptions cp ServerOptions.txt ServerOptions2.txt</pre></code> Editiert nun die '''ServerOptions2.txt''' und legt einen neuen Standardport fest (z.B. 27889) und tragt den neuen gewünschten GameType ein. Speichert die Änderung. <code><pre>cd /home/meinfear/FEAR cp start.sh start2.sh</pre></code> Damit haben wir eine zweite Startdatei angelegt. Editiert auch diese und ändert die Zeile <code><pre>./fearserver.bin</pre></code> in <code><pre>./fearserver.bin -optionsfile ServerOptions2.txt</pre></code> Nun startet screen und den ersten Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> Die zweite Screensession machen wir mit einer Tastenkombination auf:<br><br> '''STRG+a c'''<br><br> Dort starten wir nun den Server: <code><pre>./start2.sh</pre></code> ==Kurzer Exkurs zu Screen== Screen verlassen, läuft im Hintergrund weiter: Konsole zumachen, oder an der Konsole '''STRG+a d'''<br><br> '''exit''' beendet eine Konsole, bei der letzten Konsole beendet sich screen<br><br> '''screen -R''' startet die laufenden Screensessions.<br><br> '''STRG+a leer''' Schaltet zwischen den einzelnen Screensessions um. <br><br> ==Checkupscript für zwei laufende Server== Die Idee bei folgendem Script ist, dass es über einen Crontab-Eintrag in kurzen regelmäßigen Abständen prüft, ob der F.E.A.R. Server läuft. Ist dies der Fall, dann überprüft das Script, ob der Server eventuell am Überlaufen ist. D.h. ist die CPU Last über einen speziell festgelegten Schwellenwert, dann werden die Prozesse gekillt und der Server neu gestartet. Ich habe das einwenig ausgebaut, und hierbei zwei parallel laufende F.E.A.R. Server in die Überwachung genommen. Da das Skript E-Mails versendet muss ein MTA wie der Exim4 konfiguriert sein. <br><br> '''Vorbereitung für zwei Server:'''<br> Die zwei Server werden über ein eigenes Startskript aufgerufen. Zudem kopieren wir die Server Binary auf einen eienen Namen, damit der Prozess später anhand seines Namens gefunden und zur Not beendet werden kann. <br><br> Ich gehe davon aus, dass der User, '''meinfear''' heißt. Sein Verzeichnis liegt unter '''/home/meinfear'''. Das Fear Verzeichnis lautet '''FEAR'''. Das Script müsst Ihr dann entsprechend an Eure Gegebenheiten anpassen. <br><br> Die Startdatei kopieren wir wie folgt: <code><pre>cp start.sh start2.sh</pre></code> Die Binary: <code><pre>cp fearserver.bin fearserver2.bin</pre></code> In der Startdatei (start.sh und start2.sh) ändert den Inhalt etwas ab. Zum einen muss in Euer Homeverzeichnis gewechselt werden: <br><br> '''cd /home/meinfear/FEAR''' <br><br> Danach noch hinter den '''./fearserver.bin''' die Ergänzung '''-optionsfile''' mit dem ABSOLUTEN Pfad zu Eurer Serverkonfigurationsdatei. Z.B.: <br><br> '''./fearserver.bin -optionsfile /home/meinfear/FEAR/ServerOptions/ServerOptions.txt''' <br><br> Speichert die Änderungen entsprechend ab. Dann legt im Verzeichnis '''/bin''' die Datei wie folgt an: feartest <code><pre>#!/bin/sh # F.E.A.R. Dedicated Checkup Script by Pierre "Gargi" Kretschmer top -b -n 1 | grep fearserver.bin server1=$? top -b -n 1 | grep fearserver2.bin server2=$? if [ \( $server1 = 1 \) -o \( $server2 = 1 \) ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "No active F.E.A.R. Server found. Starting new Killerspiele sessions!" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server start" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else fear1load=$(top -b -n 1 | grep fearserver.bin | cut -d " " -f20) fear2load=$(top -b -n 1 | grep fearserver2.bin | cut -d " " -f20) if [ $fear1load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/fear/meinFEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 elif [ $fear2load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else rm /var/log/fearcheck.log echo "server load ok" > /var/log/fearcheck.log fi fi </pre></code> ''(Bitte beachtet, dass bei dem Hinweis //ZEILENUMBRUCH im Skript, die markierten Zeilen in eine Zeile geschrieben werden müssen, sonst ist das Skript nicht funktionsfähig!)'' <br><br> Zu Beginn prüft das Script also, ob beide Server aktiv sind. Sind es diese nicht, oder fehlt einer der beiden Server, dann werden alle Prozesse aus dem Bereich "gekillt" und der Server neu gestartet. Fehlt wieder ein Server, wird dies beim nächsten Test wieder ausgelöst, bis alle beiden Server aktiv sind. Sind beide Server vorhanden, dann wird getestet, ob die Auslastung der einzelnen Server über 30% liegt. Sollte das der Fall sein, werden auch hier alle Prozesse getötet und die beiden Server neu gestartet. Auch hier gibt es dann eine E-Mail als Benachrichtigung. Sollte der Load unter 30 % liegen, dann passiert gar nichts und der Check kommt dann zum nächsten Lauf wieder. Man kann dieses Script dann über die Crontab ('''etc/crontab''') beispielsweise alle 2 Minuten aufrufen: <code><pre>*/2 * * * * root /bin/feartest > /dev/null</pre></code> Vergesst nicht, das Skript ausführbar zu machen: <code><pre>chmod +x /bin/feartest</pre></code> Das Skript startet zwei eigene Screen Sessions für den gleichen User. Um die Screensession aufzurufen, macht das als eingeloggter User mit einem <code><pre>screen -r server1</pre></code> oder <code><pre>screen -r server2</pre></code> Ihr könnt dann auch im Script die Bezeichnung der Sessions individuell ändern. Dies findet über dem screen Parameter -'''S''' statt. <br><br> Den Schwellenwert von den voreingestellten 30 % könnt Ihr wenn Ihr wollt auch individuell ändern. Diesen findet Ihr im if Bereich hinter dem Prüfwert '''-gt'''. Wenn ein Server generell höhere Last hat, dann kann man die auch mit entsprechend unterschiedlichen Werten versehen. 1e3ebdbaaf454e494399fc40276b0ec131594587 Openwrt auf wrt54GL 0 113 131 2009-06-02T22:28:20Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20p...“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wer ein wenig bastelfreudig ist, der kann seinen Linksys WRT54GL Router gänzlich umfunktionieren. Hierzu hat sich um die [http://www.openwrt.org/ OPENWRT Firmware] eine recht große Community entwickelt und es finden sich ein Vielzahl an Programmen, die für OpenWRT kompiliert sind. So kann man seinen Linksys Router z.B. mit der mächtigen [http://www.shorewall.net/ Shoreline Firewall (Shorewall)] bestücken, und die Kiste zum Wachhund im Netzwerk umkonzipieren. Freaks basteln sogar noch eine Flashcard in die Kiste, um noch mehr Funktionen wie einen ftp oder Webserver zu integrieren. Aber eines vorweg: '''Mit der OpenWRT Firmware ist die Maschine nicht mehr über einen Webadmin konfigurierbar'''. D.h. es ist auch nicht mehr so leicht, die Originalfirmware aufzuspielen. Wie man das zur Not wieder macht, erkläre ich im weiteren Verlauf dieses Tutorials, es ist aber dazu ein installiertes Linux notwendig (oder eventuell ein Livesystem wie [http://www.knopper.net/ Knoppix]). Dieses Tutorial beschränkt sich zuerst auf die pure Installation der Firmware (aktuelle Version: '''KAMIKAZE'''... keine Sorge: Nomen ist nicht Omen und was das bedeutet seht Ihr nachher dann, wenn Ihr Euch das erste Mal auf der OpenWRT OS einloggt ). Weitere Tutorials folgen (sofern ich immer mal einwenig Zeit dazu finde). <br /> <br /> ==Where to get== Zuerst die [http://www.openwrt.org/ OpenWRT] Firmware herunterladen: [http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/ http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/] Aktuelles bin: '''openwrt-wrt54g-2.4-squashfs.bin''' Die Kernel Version 2.4 unterstützt zudem den Wireless Lan Chip. Wer diesen nicht benötigt, kann die Kernelversion 2.6 verwenden. <br /> <br /> ==Den WRT54GL flashen== ===Methode1=== Über das Webadmin die Software hochladen. Kiste startet dann von selbst neu. <div style="text-align:center">''Flashen über den Webadmin'' <br /> [[Bild:openwrt01.jpg|center]] </div> <br /><br /> <div style="text-align:center"> [[Bild:openwrt02.jpg|center]] ''So denn alles geglückt ist''</div> <br /> <br /> ===Methode2=== Unter Linux '''tftp''' installieren. Danach die Rechner IP auf 192.168.1.2 einstellen, den Router nicht an den Strom anschließen und über den Port LAN1 mit dem Rechner über ein Netzwerkkabel direkt verbinden (NICHT ÜBER EINEN ANDEREN ROUTER !!!!). Wechselt in der Konsole Eures Linuxrechners in das Verzeichnis, in dem die Firmware liegt. Dort gebt Ihr dann folgenden Befehl ein: <code><pre>tftp 192.168.1.1</pre></code> Es erscheint ein neues Prompt: '''tftp>''' Hier der Reihe nach folgende Befehle eingeben: <code><pre>binary trace put openwrt-wrt54g-2.4-squashfs.bin</pre></code> Jetzt EL PRONTO den Stromstecker in den Router stecken und die Firmware wird selbstständig in den Speicher geschossen. Wartet ab, bis der Router von selbst neu startet. Danach ist das Update abgeschlossen. '''Hinweis: Auf die Art und Weise könnt Ihr auch wieder die ursprüngliche Linksys Firm, oder eine andere für den Router passende zurückflashen.''' <br /> <br /> ==Erste Konfiguration== Via telnet hängt Ihr Euch an den Router nun ran: <code><pre>telnet 192.168.1.1</pre></code> In dem Zustand ist noch KEIN Passwort gesetzt. Ihr erhaltet nun folgendes Bild: [[Bild:openwrt03.png|center]] Als nächstes gebt folgende drei Befehle ein: <code><pre>nvram set boot_wait=on nvram set boot_time=10 nvram commit && reboot</pre></code> Die Kiste startet neu. Passt jetzt erstmal die IP der Maschine an, wenn diese nicht auf 192.168.1.1 weiterhin bleiben soll: <code><pre>vi /etc/config/network</pre></code> Im Bereich <code><pre>#### LAN configuration config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0</pre></code> ändert Ihr die IP bei option ipaddr auf die gewünschte IP ab. Um etwas zu ändern müsst Ihr im vi den Editmodus aktivieren. Dazu die Taste "'''i'''" drücken. Wenn fertig, drückt die '''ESC''' Taste. Dann zum Speichern der Änderung ''':w''' eingeben ( Doppelpunkt und kleines W ). Zum Beenden dann ''':q''' Startet nun den Router neu: <code><pre>reboot</pre></code> Nun müsst Ihr gegebenenfalls Eure Netzwerkadresse Eures Rechners wieder anpassen, wenn die IP nicht in der gleichen IP-Range gelegen ist. Dann hängt Euch wieder via Telnet ran (mit der neuen IP Adresse natürlich). Jetzt sollten wir ein Root-Passwort vergeben. Dazu <code><pre>passwd</pre></code> eingeben und dann das gewünschte Passwort, wenn abgefragt. Ab hier könnt Ihr Euch via '''ssh''' einloggen! Nun beendet die Sitzung mit <code><pre>exit</pre></code> und loggt euch jetzt via '''ssh''' als root ein (mit neuen Passwort). Damit ist erst einmal die neue Firmware drauf und Ihr könnt mit der weiteren Konfiguration beginnen. 354ef30415cc6de7450203f39f401b1a33c10f3a Datei:Openwrt01.jpg 6 114 132 2009-06-02T22:28:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Openwrt02.jpg 6 115 133 2009-06-02T22:28:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Openwrt03.png 6 116 134 2009-06-02T22:29:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 VLan auf wrt54GL 0 117 135 2009-06-02T22:30:06Z Admin 1 Die Seite wurde neu angelegt: „Bei der Standardinstallation der OpenWRT auf einem Linksys WRT54GL sind die Netzwerkports wie folgt belegt: 1x WAN<br /> 4x LAN (Switch) Die 4 Lan Ports reagier...“ wikitext text/x-wiki Bei der Standardinstallation der OpenWRT auf einem Linksys WRT54GL sind die Netzwerkports wie folgt belegt: 1x WAN<br /> 4x LAN (Switch) Die 4 Lan Ports reagieren auf die gleiche IP. Ziel ist es nun, auf einen Port eine Zusätzliche IP zu vergeben und von den anderen Ports zu trennen. Im Grunde ist im Hintergrund eine Ethernet-Schnittstelle, die nur virtuell aufgetrennt wird. D.h. via der Netzwerkkonfiguration wird einem Port der WAN Bereich zugewiesen, den restlichen 4 Ports dann eine LAN Adresse. Dies lässt sich entsprechend weiter aufspalten. Geregelt wird das in der KAMIKAZE Firmware über die '''network''' Konfiguration unter '''/etc/config'''. Diese sieht in der Grundkonfiguration wie folgt aus: ''/etc/config/network'' <code><pre>#### VLAN configuration config switch eth0 option vlan0 "0 1 2 3 5*" option vlan1 "4 5" #### Loopback configuration config interface loopback option ifname "lo" option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 #### LAN configuration config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0 #### WAN configuration config interface wan option ifname "eth0.1" option proto dhcp </pre></code> Wichtig zuerst ist der obige Bereich, der die sogenannten Vlans (virtuellen Lans) festlegt. <div style="float:right;text-align:center;padding-left:20px"> [[Bild:ports.jpg|WRT54GL]]</div> <br /><br />'''option vlan0 "0 1 2 3 5*"'''<br /> '''option vlan1 "4 5"'''<br /><br />Hierzu muss man die Aufteilung der Ports verstehen. Intern nummeriert das Gerät die Ports von 0 bis 4 durch. Wobei '''Lan1''' die '''0''' zugewiesen bekommt und der '''Lan4''' entsprechend die '''3'''. Der WAN Port erhält die '''4'''. Zuletzt taucht hier noch die Nummer 5 auf. Das ist ein interner Port, der auf eth0 zeigt aber uns nicht weiter kümmert. <br /><br /><br /><br /> Die erste Zeile weißt nun unsere '''Lan 1 - 4''' Ports die Switchnummern 0 bis 3 zu und werden zu dem '''vlan0''' zusammengefasst. D.h. hier kann dann dem vlan0 eine IP Nummer zugewiesen werden, die für alle 4 Ports gleich gilt. Der 5. Port bekommt die Switchnummer 4, wird zum vlan1 gemacht und kann so unabhängig als WAN Port konfiguriert werden. <br /><br /> <br /><br /> <code><pre>#### VLAN configuration config switch eth0 option vlan0 "1 2 3 5*" option vlan1 "4 5" option vlan2 "0 5" </pre></code> Somit haben wir den Switchport 0 aus dem vlan0 herausgenommen und ihm nun den vlan2 zugewiesen. Wir setzen auch hier wieder eine 5 hinter die 0, damit auf den internen Port gezeigt wird. Nun müssen wir nur noch sicherstellen, dass die eth0 Schnittstelle auch eine neue Konfiguration für das zusätzliche virtuelle Lan bekommt. Sehen wir uns hierzu den Bereich der bereits bestehenden vlan0 Konfiguration an: <code><pre>#### LAN configuration config interface lan option type bridge option ifname "eth0.0" </pre></code> der vlan0 bekommt somit die Schnittstelle eth0.0 zugewiesen. Weiter unten sehen wir bei der WAN Konfiguration den ifname eth0.1 . D.h. wir nummerieren dann bei unserem neuen vlan2 entsprechend mit eth0.2 weiter. Entsprechend ergänzen wir einfach die '''/etc/config/network''' um einen weiteren Abschnitt wie folgt: <code><pre>#### LAN configuration config interface lan2 option type bridge option ifname "eth0.2" option proto static option ipaddr 192.168.1.2 option netmask 255.255.255.0 </pre></code> Wir nennen unser neues Interface '''lan2''', geben ihn die Schnittstelle eth0.2 und eine neue IP '''192.168.1.2''' mit. Damit steht unsere Konfiguration und unsere neue /etc/config/network sieht nun wie folgt aus: <code><pre>#### VLAN configuration config switch eth0 option vlan0 "1 2 3 5*" option vlan1 "4 5" option vlan2 "0 5" #### Loopback configuration config interface loopback option ifname "lo" option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 #### LAN configuration config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0 #### WAN configuration config interface wan option ifname "eth0.1" option proto dhcp #### LAN configuration config interface lan2 option type bridge option ifname "eth0.2" option proto static option ipaddr 192.168.1.2 option netmask 255.255.255.0</pre></code> Startet nun den Router neu, steckt ein zweites Patchkabel an LAN 4 und loggt Euch einmal über die eine IP Nummer und ein zweites mal über Eure neue IP Nummer via ssh ein. Als Test ob alles richtig gemacht wurde steckt das Patchkabel von LAN 4 auf Lan 3 und versucht mit der neuen IP drauf zu kommen. Dies muss an der Stelle dann fehlschlagen. 783288018532246a5f5640d0998d89ecd08684d7 Datei:Ports.jpg 6 118 136 2009-06-02T22:30:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Wrt54GL öffnen 0 119 137 2009-06-02T22:31:29Z Admin 1 Die Seite wurde neu angelegt: „Um den beliebten Router WRT54GL aus dem Hause Linksys zu öffnen (um beispielsweise einen Mod durchzuführen) benötigt man kein zusätzliches Werkzeug, nur einwe...“ wikitext text/x-wiki Um den beliebten Router WRT54GL aus dem Hause Linksys zu öffnen (um beispielsweise einen Mod durchzuführen) benötigt man kein zusätzliches Werkzeug, nur einwenig wohl dosierte Kraft. Aber bevor ich Euch erkläre, wie man das ohne ein Brecheisen bewerkstelligt, der wichtige ''Hinweis'' vorweg: '''BEIM ÖFFNEN DES GERÄTES ERLISCHT DIE GARANTIE! IHR HABT DANN KEINEN ANSPRUCH MEHR AUF IRGENDEINE GARANTIELEISTUNG.''' ''Hinweis 2, der selbstverständlich sein sollte, aber ich es gerne immer wiederhole:'' '''TRENNT DEN NETZSTECKER VOM GERÄT, BEVOR IHR DEN ROUTER ÖFFNET. NEHMT DEN ROUTER BITTE NICHT IM GEÖFFNETEN ZUSTAND IN BETRIEB!''' ''Hinweis 3:'' '''ACHTET DARAUF, DASS IHR KEINE ELEKTRONISCHEN BAUTEILE BERÜHRT! ERDET EUCH VORHER, UM ELEKTROSTATISCHE AUFLADUNG ZU VERMEIDEN!''' Der WRT54GL in der Frontansicht: [[Bild:oeffnen1.jpg|center]] Das Gerät hat vorne eine blaue Kappe und hinten den dunkelgrauen Chassis. Die blaue Kappe steckt sozusagen eingerastet auf dem dunkelgrauen Körper auf. Drückt nun links und rechts direkt hinter der blauen Kappe auf das Gehäuse und zieht die Kappe nach vorne ab: [[Bild:oeffnen2.jpg|center]] Zieht nach vorne nicht zu kräftig, da die Kappe ruckartig abspringt, nicht dass ihr dabei ein Bauteil abbrecht. Das Andrücken seitlich erfordert einwenig Kraft. Ich habe dazu das Gerät mit einer Seite auf den Boden gestellt (also hochkant) und dann auf die besagte Stelle hinter der blauen Kappe von oben her gedrückt, bis die eine Seite aus der Halterung gesprungen ist. Danach das Gerät umgedreht und das gleich von der anderen Seite her wiederholt. Nachdem die Kappe ab ist schraubt ihr hinten die beiden WLAN Antennen ab. Jetzt könnt Ihr den Deckel des grauen Körpers nach vorne wegschieben und legt somit das Mainboard frei. Hier das zerlegte Gerät: [[Bild:oeffnen3.jpg|center]]<br /> (Spätestens hier ist es Schluss mit der Garantie) Das Mainboard: [[Bild:oeffnen4.jpg|center]] Zusammengebaut wird das Gerät in umgekehrter Reihenfolge. Das Aufstecken der blauen Kappe erfordert auch hier einwenig wohltemperierten Druck. Viel Spaß beim Basteln! 8e7e37cd99b162d3efb3be321cf11fc2537cce6a Datei:Oeffnen1.jpg 6 120 138 2009-06-02T22:31:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Oeffnen2.jpg 6 121 139 2009-06-02T22:32:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Oeffnen3.jpg 6 122 140 2009-06-02T22:32:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Oeffnen4.jpg 6 123 141 2009-06-02T22:32:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Hauptseite 0 1 142 13 2009-06-02T23:47:02Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projectseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext. ;[[Documentation Working Group]] :If you are looking for a way to help the documentation effort, then please take a look in the [[cookie jar]] where we have a list of small(-ish) tasks that you can pick up when you have a bit of time and can be completed without too much effort. ;[[Sites and Infrastructure Working Group]] :The Sites and Infrastructure Working Group is responsible for maintaining a productive, jovial forum for efficient, open communication between everyone involved in the project. ;[[Translations Working Group]] :The Translations Working Group is responsible for managing Joomla! internationalisation and localisation. Here you will find information on how you can set up translations, how this team is organised, standards to use and so on. ;[[Events Working Group]] :The Events Working Group is a team of events mentors responsible for all world-wide Joomla-supported events. ;[[Communications Working Group]] :The Communications Working Group is responsible for project websites and community services such as news feeds. </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Most popular pages</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> {{Most popular pages}} </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU 01c51e9e3c47a8a834a6d03a6e15c00e4a1f2c2f 143 142 2009-06-02T23:50:19Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projectseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU 3779431b2042aaa9ac6899c32f0306d8fd4d7987 144 143 2009-06-02T23:53:55Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projectseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ da2aca4554dcae539c04594f2523a6e68bb3eb2e 147 144 2009-06-03T00:16:31Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projectseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/21/86/ Current status], [http://www.joomla.org/content/blogcategory/32/66/ Version info], [http://www.joomla.org/content/category/5/34/78/ Changelogs], [http://www.joomla.org/content/category/5/39/95/ MD5 Checksums]}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 60f4144095847221ae73a259621f8a0cec368b30 148 147 2009-06-03T00:17:12Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projectseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 7359c8e1a3f46e66ac55e7cd910f69a3de924b12 151 148 2009-06-03T00:37:55Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 3dedb6d864128a3c4b2759c0ada7f211bb6214f5 MediaWiki:Common.css 8 124 145 2009-06-03T00:09:05Z Admin 1 Die Seite wurde neu angelegt: „/* CSS an dieser Stelle wirkt sich auf alle Skins aus */ body.page-Main_Page h1.firstHeading { display:none; }“ css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ body.page-Main_Page h1.firstHeading { display:none; } 8c70910d76a91c7873d42e8696c6199fd29dccb5 146 145 2009-06-03T00:11:39Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ body.page-Hauptseite h1.firstHeading { display:none; } 69fdec0a8b50a9010fe1bd093e7b614bd83091d5 149 146 2009-06-03T00:25:09Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} 32cd842b0244143b8bc8a21d294dae7d49c24d39 150 149 2009-06-03T00:27:12Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} 6bb45b08b10ee19cfb23682a21ca0a766a0b3161 Hauptseite 0 1 152 151 2009-06-03T08:19:41Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #d0effb;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0e5f5; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ ab31a71ba0962bc891ae019beb944aa504f9cccd 153 152 2009-06-03T08:20:58Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 63df7693c5795256766638dd1d3887028a91b1d1 154 153 2009-06-03T08:21:37Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#fdfce9; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#ffffaa; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ e26b1d9c58bdb42515e87817b5d431b6124d907c 155 154 2009-06-03T08:22:20Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #abd5f5; background-color: #f1f5fc;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#fdfce9; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#fdfce9; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ b386e305c83bc97584b7bc7983e5e602da594413 156 155 2009-06-03T08:26:15Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #CECECE;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#fdfce9; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 2a4f6f988bee0402d8275f0a9a41fcc14afcb169 157 156 2009-06-03T08:27:44Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #Gold; background-color:#fdfce9; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 0a453968043b3c0cdf56fa35b2e5c1abe03e0cc5 158 157 2009-06-03T08:30:26Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid Gold; background-color: White;" | <div style="border-bottom:1px solid #004A7F; background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 6b574a8c4c724a062b848a190bad81584078cc43 159 158 2009-06-03T08:31:03Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: White;" | <div style="border-bottom:1px solid #004A7F; background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ ef34089cfd7781b891c47b82532f44c695239c8a 160 159 2009-06-03T08:32:01Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #d0effb; background-color: White;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 7e03b3e4b22af13d3a1f4442d3e4748f8c4b1acd 161 160 2009-06-03T08:32:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #d0effb; background-color: d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 228e21881468154fd3d7d5775aac4f7465c465cf 162 161 2009-06-03T08:33:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 9bae6def3efad3b14828e0411f1af73b65dd89ea 165 162 2009-06-03T09:29:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/21/86/ Current status], [http://www.joomla.org/content/blogcategory/32/66/ Version info], [http://www.joomla.org/content/category/5/34/78/ Changelogs], [http://www.joomla.org/content/category/5/39/95/ MD5 Checksums]}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 54a2866dc1f5d0a7d2299b79ce87048da58055f8 166 165 2009-06-03T09:33:26Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Ambox|type=notice|image=notice|style=width:500px|text=Das ist ein Test}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ bba1642817bcee59ed4a927944c6c8d3a6841e6a 171 166 2009-06-03T09:56:05Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 26b00e39145150b5ea78ee81858567cda08d3fcb 202 171 2009-06-03T10:38:08Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt.}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 9ea1436e0bac8244ce0df5d08e9e2e67464a5b9d 203 202 2009-06-03T10:39:02Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ ca37b578f9af1f1a02245ae6da226630704bf2b9 MediaWiki:Common.css 8 124 163 150 2009-06-03T09:27:05Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Article message box template styles */ table.ambox { margin: 0 10%; /* Will not overlap with other elements */ border-collapse: collapse; background: #fbfbfb; border: 1px solid #aaa; border-left: 10px solid #1e90ff; /* Default "notice" blue */ } table.ambox th.ambox-text, table.ambox td.ambox-text { /* The message body cell(s) */ padding: 0.25em 0.5em; /* 0.5em left/right */ width: 100%; /* Make all templates the same width regardless of text size */ } table.ambox td.ambox-image { /* The left image cell */ padding: 2px 0px 2px 0.5em; /* 0.5em left, 0px right */ text-align: center; } table.ambox td.ambox-imageright { /* The right image cell */ padding: 2px 4px 2px 0px; /* 0px left, 4px right */ text-align: center; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} ca665cdea3f691d56223ddbdc977b7433d7d26e7 164 163 2009-06-03T09:28:46Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Article message box template styles */ table.ambox { margin: 0 10%; /* Will not overlap with other elements */ border-collapse: collapse; background: #fbfbfb; border: 1px solid #aaa; border-left: 10px solid #1e90ff; /* Default "notice" blue */ } table.ambox th.ambox-text, table.ambox td.ambox-text { /* The message body cell(s) */ padding: 0.25em 0.5em; /* 0.5em left/right */ width: 100%; /* Make all templates the same width regardless of text size */ } table.ambox td.ambox-image { /* The left image cell */ padding: 2px 0px 2px 0.5em; /* 0.5em left, 0px right */ text-align: center; } table.ambox td.ambox-imageright { /* The right image cell */ padding: 2px 4px 2px 0px; /* 0px left, 4px right */ text-align: center; } /* J! Logo Colors - red: #ED2E38 blue: #578AD6 orange: #EBAD14 green: #61BF1A */ table.ambox-notice { border-left: 10px solid #578AD6 ; /* Blue */ } table.ambox-delete, table.ambox-serious { border-left: 10px solid #ED2E38 ; /* Red S+I WG */ } table.ambox-content { border-left: 10px solid #EBAD14 ; /* Orange (Dev WG) */ } table.ambox-style { border-left: 10px solid #C16B42; /* Umbra (Trans WG) */ } table.ambox-merge { border-left: 10px solid #C348C3; /* Purple (Doc WG) */ } table.ambox-growth { border-left: 10px solid #61BF1A ; /* Green (Found WG) */ } table.ambox-protection { border-left: 10px solid #bba; /* Gray */ } table.ambox.ambox-mini { /* small floating box variant */ float: right; clear: right; margin: 0 0 0 1em; width: 25%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} 5fb114457b58493b8fc11972d675e0ddf5f50b63 170 164 2009-06-03T09:50:27Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} 6bb45b08b10ee19cfb23682a21ca0a766a0b3161 Vorlage:Hinweis 10 126 172 2009-06-03T09:57:39Z Admin 1 Die Seite wurde neu angelegt: „{| style="color:green;background-color:#ffffcc;" cellpadding="20" cellspacing="0" border="1" |ACHTUNG |{{{1}}} |}“ wikitext text/x-wiki {| style="color:green;background-color:#ffffcc;" cellpadding="20" cellspacing="0" border="1" |ACHTUNG |{{{1}}} |} cf384285cd620593b390a3583349542fb2bd2609 173 172 2009-06-03T10:06:46Z Admin 1 wikitext text/x-wiki {| style="color:green;background-color:#ffffcc;" cellpadding="0" cellspacing="0" border="1" |ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 2c9700b27c23c5c81aa54e4d815aa210422caf31 174 173 2009-06-03T10:08:41Z Admin 1 wikitext text/x-wiki {| style="color:green;background-color:#ffffcc;" cellpadding="0" cellspacing="0" border:1px solid #660000; |ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 0cdda86581644f77afb39a7d033a29d97c5b3891 175 174 2009-06-03T10:09:45Z Admin 1 wikitext text/x-wiki {| style="color:green;background-color:#ffffcc;" cellpadding="0" cellspacing="0" border:1px solid #660000; |[[Bild|marbel_bright_warning_small.png]] ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 4c783d9422ecc646cdf304ecfb9670ea0e199240 176 175 2009-06-03T10:10:24Z Admin 1 wikitext text/x-wiki {| style="color:green;background-color:#ffffcc;" cellpadding="0" cellspacing="0" border:1px solid #660000; |[[Bild:marble_bright_warning_small.png]] ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} e0c8eb74e58935232a966c290b4c48cc9e87f845 178 176 2009-06-03T10:12:53Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; font-style:bold;" cellpadding="0" cellspacing="0" border:1px solid #660000; |[[Bild:marble_bright_warning_small.png]] ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} b4f78d8e6717431a37e0f0ad17a84fdaaf686fff 179 178 2009-06-03T10:13:46Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; font-style:bold; border:1px solid #660000;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} e06553a954eeeb4c2f39a03d9b55a3b9a93d38f1 180 179 2009-06-03T10:15:09Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] ACHTUNG |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 652b4e70e5c2f2653e462b4a8f1af5bd34b55ece 181 180 2009-06-03T10:16:05Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 4a10961783db314f68c1debd71eaf49366253e05 182 181 2009-06-03T10:16:31Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000;" cellpadding="0" cellspacing="0" width="60" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 4677131331673e0509e886f0e72e79bd97506b78 183 182 2009-06-03T10:17:31Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:60" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 1b3d6318db891e23225dcf0996c9d80d58221da5 184 183 2009-06-03T10:17:44Z Admin 1 wikitext text/x-wiki {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100px;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} 03ddde286abd21b7c01b65ac67327ff966424c4c 185 184 2009-06-03T10:23:10Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100px;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} </div> c992cf85b2456acfa41eec94a5afa0396a3622f8 186 185 2009-06-03T10:23:36Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White;"|{{{1}}} |} </div> 3d9c4b1fc1beadbf2ccad5cd6c07467e52896a08 187 186 2009-06-03T10:24:28Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:#d0effb; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White; width:95%;"|{{{1}}} |} </div> b32340b4a6970d32c568e1fc687e276ac70f72fe 188 187 2009-06-03T10:25:06Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:#red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White; width:437;"|{{{1}}} |} </div> 473db974c29f281b5aebf49059798f132eb83f53 189 188 2009-06-03T10:25:25Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White; width:437;"|{{{1}}} |} </div> 8728eeee3718f24c5c228ae8d9742c197d0490ab 190 189 2009-06-03T10:25:53Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White; width:437px;"|{{{1}}} |} </div> e8907789743c9424d8765cdbb4927ffee8f5dd98 191 190 2009-06-03T10:31:53Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-style:italic; color:green;background-color:White; width:437px;"|{{{1}}} |} </div> 1d5eae09d1be5cb0b6c83c48cbe27e48b7ca0cfc 192 191 2009-06-03T10:32:51Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:1px solid #660000; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:437px;"|{{{1}}} |} </div> 7526048e9f3208c68ca8cfc5511c75f79109de74 193 192 2009-06-03T10:33:27Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:437px;"|{{{1}}} |} </div> 466b348f86cd8f4dcaf0a032ad3af60b752782c0 194 193 2009-06-03T10:33:49Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:437px;"|{{{1}}} |} </div> f2e9f2c0df7139f3fcac8e1fa83902ab77ceb1ba 195 194 2009-06-03T10:34:18Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:437px; padding:0.2em"|{{{1}}} |} </div> 5c0146bf2f10d37e60885fd383b00fcb88366395 196 195 2009-06-03T10:34:41Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:430px; padding:0.2em"|{{{1}}} |} </div> 1e133bc0583416c3471df32c4055060d2326aebc 197 196 2009-06-03T10:34:55Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> af03cd5a36a73ae061eb92ad512435f36afb0dbb 198 197 2009-06-03T10:35:35Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.2em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 3d75fc145c7e1227b42f4c600a28a4c7660aaea3 199 198 2009-06-03T10:35:59Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="font-weight:bold; background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> af03cd5a36a73ae061eb92ad512435f36afb0dbb 200 199 2009-06-03T10:36:15Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; font-weight:bold; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 8ad68518a0b6b6319f974076e188d7c39ae8d781 201 200 2009-06-03T10:36:59Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.3em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 72efe0b0e57b41ddcd827a79354b409296767796 204 201 2009-06-03T10:40:03Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;left:50%;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> c56f1c4e4886c4dc7403d8876aef8f2e37630969 205 204 2009-06-03T10:41:11Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> f8ece12d78cceda6ea794e6bc1fd12622ee4580b Vorlage:Hinweis 10 126 206 205 2009-06-03T10:42:16Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:50px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 183424f0b4814c9328a32d6c2fa8d5b62efcac24 207 206 2009-06-03T10:42:58Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:50px 0em 0em 0em;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 45089ab16da305dfcece67b50e99b08d198b8775 208 207 2009-06-03T10:43:21Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 50px 0em 0em;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 7f7e4ac78d8da944c803118d7edfc4ead8594ab6 209 208 2009-06-03T10:43:40Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 50px 0em;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> 34a39a0bc96d10f3ac973744a908d34724db9701 210 209 2009-06-03T10:43:59Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 50px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> e4b4de50cbfabf3ed9e9967d97583006991569e5 211 210 2009-06-03T10:44:12Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; width:433px; padding:0.2em"|{{{1}}} |} </div> fc988f2ac962f9ad24f0f82c75c53f708d4bda62 212 211 2009-06-03T10:45:06Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:70px;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em"|{{{1}}} |} </div> 05f3fb215df700fa9e6bbec9ca0f19330c93d226 213 212 2009-06-03T10:45:40Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100px;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em"|{{{1}}} |} </div> 5dc46ac2bff16ec41c43c4f23d9404471a664ddf 214 213 2009-06-03T10:46:32Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em; width:433px;"|{{{1}}} |} </div> 517088989d2d8f8a29a2dadaa65121020d67f531 215 214 2009-06-03T10:47:44Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em; width:433px;"|{{{1}}} |} </div> 20390874626f359c5ab2f2503b4b0497a3380af8 216 215 2009-06-03T10:54:41Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:67px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 1a3f8903616b0ba2ddec1c1fc52916a6ede76a03 217 216 2009-06-03T10:55:08Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:60px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> cd22792cec848b17dbb861044811ce9e977546f5 218 217 2009-06-03T10:55:24Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:50px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> af324ab4a0b6dfc91c6b6e284b9b27e887bdbfb0 219 218 2009-06-03T10:55:38Z Admin 1 wikitext text/x-wiki <div style="align:center;width:500px; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:47px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 743c7ab9924c6a2409b1aa197200a71f3ce7d17b 220 219 2009-06-03T10:55:59Z Admin 1 wikitext text/x-wiki <div style="align:center;width:100%; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:47px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> dd120e186930e80de7ab9efbf2c2a0546ec77c97 221 220 2009-06-03T10:56:25Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:47px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 2750301240b3d7fdec38dd8b2fc8b713b1e32d67 222 221 2009-06-03T10:58:13Z Admin 1 wikitext text/x-wiki <div style="text-align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:47px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> b111fdd39c1cd9cf079cc3ec560d012d7059c985 223 222 2009-06-03T10:58:38Z Admin 1 wikitext text/x-wiki <div style="text-align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> f230019fb4276ee78e988ba442c93a10f57f732a 224 223 2009-06-03T10:59:19Z Admin 1 wikitext text/x-wiki <div style="text-align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.2em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> f5fc809599b1a0f7e3c06349e311b384794cfadf 225 224 2009-06-03T10:59:42Z Admin 1 wikitext text/x-wiki <div style="text-align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.1em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 759bae08b50f51bce4a82f2878ea175b3af65fb5 226 225 2009-06-03T11:00:21Z Admin 1 wikitext text/x-wiki <div style="padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="text-align:center; width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 62b3cbe35ef70ec58a23ce0e62ff12b5d05f29bb 227 226 2009-06-03T11:01:24Z Admin 1 wikitext text/x-wiki <div style="text-align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="text-align:left; width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 6da73ca0d84634f811f6cc52d8800cde95b595da 228 227 2009-06-03T11:03:15Z Admin 1 wikitext text/x-wiki <div style="padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> d502033b04cb3dd03294f6bd2114dd8494de5bc9 229 228 2009-06-03T11:04:13Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:red; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 5ce02688bc2ed70fdaba19fae2ec38363c85c113 237 229 2009-06-03T11:33:12Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_warning_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> d8d429cf79524e3df008b7d2a4ffb72dede6bc80 Hauptseite 0 1 230 203 2009-06-03T11:05:14Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 91dc695d07c5420353cd7f1edb0da0ff5f7dd99f 231 230 2009-06-03T11:05:35Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ f23dbcd11a0c056b3bf6d70409e084086eeec15a 232 231 2009-06-03T11:14:02Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 2cec94c8481e9ac3eddcbf8cd465bc2f5d870234 235 232 2009-06-03T11:15:31Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 912a40d1be96f78d50579299b9a4caffd33df184 236 235 2009-06-03T11:15:46Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :Testtext :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 1efe198e653531f6e2fc292c7256e5892dee38b1 240 236 2009-06-03T12:29:43Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Inhalt von mySLUG :[[Slug als Webserver]] :Testtext </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 39870160e1bd47099fcc90ff6b78890ff9860773 241 240 2009-06-03T12:33:51Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren :Mailserver auf Debian mit Imap, Smarthost und Filter :Ioquake3 Server und Build Service </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ e76592e7478f9c643571a08d971402ed0df7eb22 242 241 2009-06-03T12:34:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Das ist ein Test, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ e5039672577f5ded6ba30f6e2522ab2bbf04869d 243 242 2009-06-03T12:35:59Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Testtext</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 3b8799a4b997a2ad271f6ad85cd759a8b63ccdb5 244 243 2009-06-03T12:37:28Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php!}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ e7686c11fbee51de2695221baac90dfd39734151 245 244 2009-06-03T12:38:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Um dort eine Frage zu stellen ist eine kostenlose Registrierung notwendig.}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 6927c243a82ede5726f1780836617799bc8ddfea 246 245 2009-06-03T12:40:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ ca37145bfebf6e32ff98116822380a04d707e015 249 246 2009-06-03T15:45:40Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ b0cb24990338dca31eece9e7de2336197b002e12 253 249 2009-06-03T15:49:00Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}}</br> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 8352fe8183dd7187331db19b977a80ccd77e75ad 254 253 2009-06-03T15:49:22Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}}<br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ a838a4cecfec0f63606b313381fca7825b28dcfa 255 254 2009-06-03T15:50:05Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} MediaWiki wurde erfolgreich installiert. Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch]. == Starthilfen == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen] IST IM AUFBAU __NOTOC__ __NOEDITSECTION__ 1fbd32117eb2f41d0479b1bec2a6b8dafca6070f 256 255 2009-06-03T16:49:00Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. __NOTOC__ __NOEDITSECTION__ 09198e2a550e25c151c0cdfb75c808be262a3b78 Vorlage:Frage 10 128 233 2009-06-03T11:14:34Z Admin 1 Die Seite wurde neu angelegt: „<div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:blue; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; w...“ wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:blue; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_question_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 044e859c0d597940cfb8356e1f977403664995b1 238 233 2009-06-03T11:34:04Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_question_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> c36abb92e2c043155b305a7c8593b6afdf118fff 239 238 2009-06-03T11:34:34Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_question_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 1834f7126922eaddcb24eb5cd5968bdeba0085a3 MediaWiki:Common.css 8 124 247 170 2009-06-03T15:33:38Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: black; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} 81673dea9f4ae3b20843fa2f7fe32a471a549548 248 247 2009-06-03T15:34:26Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} fd67ca82075ae1ad38f9a6010b4dfebc0e15c40a Vorlage:Antwort 10 130 250 2009-06-03T15:46:26Z Admin 1 Die Seite wurde neu angelegt: „<div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:yellow; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px;...“ wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:yellow; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_answer_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 07293481e28a37c25218ee76df6346418505008d 252 250 2009-06-03T15:48:11Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#FFD800; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:marble_bright_answer_small.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 53cc9d8567dc27901942ab86fd59f6ff50609917 Datei:Marble bright answer small.png 6 131 251 2009-06-03T15:46:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Hauptseite 0 1 258 256 2009-06-03T16:50:44Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. __NOTOC__ __NOEDITSECTION__ fd3077a6ccf1cbe1cdd24de86d0fac0932c1991a 259 258 2009-06-03T16:51:05Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. __NOTOC__ __NOEDITSECTION__ f72aeadb0fec1a53af7056881ea0e327f564bd80 260 259 2009-06-03T16:52:00Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON LEFT OF TWO BOX SECTION --> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> <!-- PICTURE ON RIGHT OF TWO BOX SECTION--> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. __NOTOC__ __NOEDITSECTION__ 460b48e56a4c1645ba1fcbc49b48167386f47bc3 261 260 2009-06-03T16:53:40Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext </div> __NOTOC__ __NOEDITSECTION__ aed8f8df34b2361b5b981bee3fc76f360e80caca 262 261 2009-06-03T16:54:49Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext </div> __NOTOC__ __NOEDITSECTION__ 54290f0118aea3598cba037b1b3c40ecfcbeddfa 263 262 2009-06-03T16:55:23Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext </div> __NOTOC__ __NOEDITSECTION__ 2d7196bfc37f968e74ef1cf0c932f354cc999b3a 264 263 2009-06-03T16:57:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Hinweis|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> {{Frage|Das ist ein Test für eine Frage, mal sehen wie sich das innerhalb eines Textes darstellt. Jetzt sehen wir einmal zu, dass wir das alles noch zentriert hinbekommen!}} <br/> {{Antwort|Das ist eine Antwort auf unsere Testfrage!}} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div>< </div> __NOTOC__ __NOEDITSECTION__ ab46e827a49b02ba92556e24fecb4d572d5cca55 266 264 2009-06-03T16:59:50Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div>< </div> __NOTOC__ __NOEDITSECTION__ ca939bfd2b56b735fa5723ebaec3cce7c921b3ea 267 266 2009-06-03T17:00:53Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div>< </div> __NOTOC__ __NOEDITSECTION__ ead3f5de5a85000f04e636d130b3040e5925a28c 268 267 2009-06-03T17:04:14Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> </div> __NOTOC__ __NOEDITSECTION__ c557ab613101b075752292db8f27c8a801de0873 269 268 2009-06-03T17:08:01Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum </div> </div> __NOTOC__ __NOEDITSECTION__ e0a8649c3fd9b5841ab5b3a5fda49d63ec677a0d 270 269 2009-06-03T17:09:08Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum </div> __NOTOC__ __NOEDITSECTION__ 9bca88f20d39511c30e91c75030010aa4b2a79b0 271 270 2009-06-03T17:10:38Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave </div> __NOTOC__ __NOEDITSECTION__ 0b7b525c84b726349cc48f529ff0555285950bfc 272 271 2009-06-03T17:13:23Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave ;weitere Webprojekte :http://www.gargi.org :http://www.pierre-kretschmer.de :http://www.gargamel.de </div> __NOTOC__ __NOEDITSECTION__ b619cdb601cf101ca4ed12613dd40bfe26bc75c4 273 272 2009-06-03T17:15:56Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 4a026b40bf10a0c7ece4100cb388138b49860f45 274 273 2009-06-03T17:20:40Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 6ce00b2ece0f69aba5111c43755653c85c1de6e7 277 274 2009-06-03T17:23:03Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 112873639ef7339159dc7e69ddc6066ff268d09b 279 277 2009-06-03T17:40:31Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08.jpg]] </div> :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 67170f79f9cdb8b5a26e57d5654713bb43b1720a 280 279 2009-06-03T17:41:30Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Inhalt von mySLUG <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext ;Inhalt von mySLUG :Testtext :Testtext </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 91d17f1d2ac5e9ad7748d3b59ba98917fa2340e3 282 280 2009-06-03T17:48:22Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> mySLUG ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart. Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle. Ic h kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll. <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ a04d719a1c66ee523e60a4a5f4e18a0abe5e0a25 283 282 2009-06-03T17:49:12Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> mySLUG ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart. Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ic h kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 4bac8f9981a9be8594b76968821a22671a085d4e 284 283 2009-06-03T17:49:38Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> mySLUG ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/><br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/><br/> Ic h kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/><br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ b305f6933abbbf27f20c80846961a3a5d19c3043 285 284 2009-06-03T17:50:27Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> mySLUG ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ bed3cc0dc07ea1b0ea6dbe124445d01b28f8a3cf 286 285 2009-06-03T17:51:06Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> mySLUG ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 4ac92dbbff90250f202bd01bd942ad2527200b34 287 286 2009-06-03T17:55:26Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> mySLUG ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> mySLUG ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ d1ced38fe12a2976be2776fc9e448c51c10c5641 288 287 2009-06-03T17:58:55Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß!<br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 16751492e36b01615791e47b713f1895c0ed504a 289 288 2009-06-03T18:00:10Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> mySLUG steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ dbb5087611c83da1ea0419a56241f948e4946475 290 289 2009-06-03T18:00:43Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ b44e3ba9a469f606ee4ce449bd20eab69cb47d8a 291 290 2009-06-03T18:01:37Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 084e29fabd8f1ed20c9f4aa93184386138bdf0ad 292 291 2009-06-03T18:47:38Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch für absolute Neulinge ermöglichen, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. jeder hat die Möglichkeit hier auch selbst Hand anzulegen und seine Software wieder zu verbreiten. Wer mag kann im Quellcode optimieren, verbessern, anpassen, wie er es mag. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit rein, sodass man sich immer weiter nach vorne begibt. Und es gibt weiterhin immer wieder kniffelige Aufgabe zu Lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 4006745fd018d13e1e110c94a0fa3ceb73148bda 294 292 2009-06-03T18:51:52Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 366a24b544198ca0760398bf8f16e9343d9c8e60 295 294 2009-06-03T18:52:32Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ d0ed7e0c0d1eb36a5fef164f72854e8a8fe92fcc 296 295 2009-06-03T19:04:20Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ e4b75f63f1850a0e9ef1222cca6689787c0fa459 297 296 2009-06-03T19:04:44Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilname am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 366a24b544198ca0760398bf8f16e9343d9c8e60 Datei:Knete.png 6 134 275 2009-06-03T17:21:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 276 275 2009-06-03T17:22:04Z Admin 1 hat eine neue Version von „[[Datei:Knete.png]]“ hochgeladen wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Serverdaheim.jpg 6 137 293 2009-06-03T18:48:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Ioquake3 Server und Build Service 0 105 298 121 2009-06-04T18:47:45Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> ''(Bitte achtet im Script aquf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!)'' <br><br> Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br><br> Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos. <br> <br> Pierre "Gargi" Kretschmer 5b7cee21f5b6996bc178c6616a7ac75c835517be 299 298 2009-06-04T18:49:10Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos. <br> <br> Pierre "Gargi" Kretschmer 2a58c350ae99874adfb3199a332496247ebbee26 300 299 2009-06-04T18:50:34Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer f793f969c4fa4db5e22dac2c562e4750552f853f Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 301 118 2009-06-28T11:12:49Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|Schema]] <br> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter /'''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * root /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 623cec09234756bb14d19a5ece864d5976207b72 302 301 2009-06-28T11:13:33Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|Schema]] <br> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * root /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 57be09d641ed883ab7ac40dcded0ec39bd97ea0e 304 302 2009-06-28T15:27:18Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|Schema]] <br> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] e0e517ff296b32649819aaf805d64bd6c78666b5 F.E.A.R. Dedicated Server auf Linux 0 112 303 129 2009-06-28T11:15:46Z Admin 1 /* Checkupscript für zwei laufende Server */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Der mittlerweile etwas betagte Gruselshooter F.E.A.R. aus dem Hause Sierra hat ein gutes Multiplayermodul, das sich auch heute nach ca. 3 Jahren nach Erscheinen der letzten Version 1.08 großer Beliebtheit erfreut. Zumal das Multiplayermodul F.E.A.R. Combat kostenlos downloadbar ist und somit der Multiplayer Part frei gespielt werden kann. <br><br> Die Installation auf einem Linux Server ist relativ einfach. Die Prozedur auf einem Debian Server (getestet auf meinem intel Atom 270 Server mit einem 64bit Debian 5 , Lenny) ist schnell erledigt. <br><br> Legt einen eigenen User für das Spiel an, da wir den dedicated Server nicht als root laufen lassen wollen. Falls Ihr noch einen anlegen müsst, dann macht das an der Konsole als root <code><pre>adduser meinfear</pre></code> Damit haben wir den User '''meinfear''' generiert und dieser hat sein Homeverzeichnis '''meinfear''' nun unter '''/home'''. <br><br> Jetzt benötigen wir ein paar Pakete, die wir wie folgt installieren können: <code><pre>apt-get install libstdc++5 screen</pre></code> Wenn Ihr ein 64bit System verwendet, dann muss ein Paket mehr rein: <code><pre>apt-get install libstdc++5 ia32-libs screen</pre></code> Nachdem die Pakete im System sind werden wir nun den FEAR Server installieren. Das machen wir als normaler User. Wenn Ihr noch root seid, dann wechselt nun die Userid mit einem: <code><pre>su meinfear</pre></code> und wechselt in sein Homeverzeichnis: <code><pre>cd /home/meinfear</pre></code> Nun können wir den Server herunterladen: <code><pre>wget http://www.1337-server.net/fear/fear-linuxserver-1.08.tar.gz</pre></code> Die Datei entpacken wir: <code><pre>tar -zxvf fear-linuxserver-1.08.tar.gz</pre></code> Nun haben befindet sich in Eurem Homeverzeichnis das neue Verzeichnis '''FEAR'''. Wir wechseln nun dort hin: <code><pre>cd FEAR</pre></code> und können auch schon den Server starten: <code><pre>./start.sh</pre></code> Wenn alles glatt läuft solltet Ihr diese Ausgabe sehen: <code><pre> F.E.A.R. Dedicated Linux Server - Version FEAR v1.08 Copyright (c) 2005 Monolith Productions, Inc. All rights reserved. Initializing... Map Rotation: Asylum Cafeteria Campus Construction Docks Evac Factory HighTech Office Refinery Stockpile WaterWorks Loading world: Worlds\ReleaseMultiplayer\Asylum World loaded. Ready.</pre></code> ==ServerOptions== Der Server läuft nun auf dem Standardport '''27888'''. <br> Wenn Ihr den Gamemode ändern wollt oder auch den Port, dann müsst Ihr das in der Datei '''/FEAR/ServerOptions/ServerOptions.txt '''erledigen. <br><br> Wichtig ist zunächst Folgendes in dieser Datei. <br><br> Sektion '''[ServerSettings]''': <br><br> GameType=DeathMatch ''Legt den Gametype fest (siehe darunterliegende Sektionen)''<br> ServerMessage= ''Eine Meldung, die der Server ausgibt beim Connecten''<br> UsePassword=0 ''0=kein Passwort 1=Passwortgeschützt''<br> Password=password ''Serverpasswort''<br> AllowScmdCommands=0 ''Schaltet Adminkommandos ein''<br> ScmdPassword=password ''Admin Passwort''<br> Port=27888 ''Standardport''<br> ...<br> Dedicated=1 ''0=kein dedicated Server 1= Dedicated Server''<br> ...<br> AllowVoteKick=1 ''Diverse Votingsettings''<br> AllowVoteTeamKick=1<br> AllowVoteBan=1<br> AllowVoteNextRound=1<br> AllowVoteNextMap=1<br> AllowVoteSelectMap=1<br> MinPlayersForVote=5<br> MinPlayersForTeamVote=3<br> VoteLifetime=30<br> VoteBanDuration=60<br> UsePunkBuster=0 ''Punkbuster ja oder nein. 0=nein 1=ja''<br> <br> Die darunterliegenden Sektions nehmen Einstellungen für die einzelnen Spielearten fest, welchen Ihr oben unter GameType festlegt. Ihr solltet auf alle Fälle im jeweiligen Spieletyp Euren Servernamen festlegen, damit dieser im Ingamebrowser später auch eindeutig gefunden werden kann. Den Namen legt Ihr beim Parameter <br><br> '''SessionName='''<br> <br> fest. Wie schon gesagt, den könnt Ihr für jede Spieleart anders nennen, da dieser in jeder einzelnen Sektion festgelegt werden kann. <br><br> ==Speicherzugriffsfehler== Beim Installieren auf meinen Server begrüßte mich der Server zunächst beim Start mit einem Speicherzugriffsfehler (Segmentation fault) und brach ab. Ich dachte zuerst an ein Problem mit der Architektur. Allerdings lag das in meinem Fall an der eingeschalteten Firewall. Wenn Ihr iptables am Laufen habt, dann müssen folgende Ports jeweils UDP und TCP freigeschaltet werden '''27888''' (je nachdem wie Ihr Euren Standardport setzt) und den Port '''27900 '''damit Euer Server gelistet wird. Tragt diese Ports im IN und OUT Eures Scripts ein. Danach sollte der Server starten. <br><br> ==Screen== Wenn Ihr den Server an der Konsole via ssh oder ähnlich startet, dann startet zuerst screen und dann den Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> ==Mehrere Server parallel== Wenn Ihr auf Euren Server mehrere Gamemodi beispielsweise laufen lassen wollt (der Slowmo Deathmatch ist recht schön), dann legt eine weitere ServerOptions Datei an: <code><pre>su meinfear cd /home/meinfear/FEAR/ServerOptions cp ServerOptions.txt ServerOptions2.txt</pre></code> Editiert nun die '''ServerOptions2.txt''' und legt einen neuen Standardport fest (z.B. 27889) und tragt den neuen gewünschten GameType ein. Speichert die Änderung. <code><pre>cd /home/meinfear/FEAR cp start.sh start2.sh</pre></code> Damit haben wir eine zweite Startdatei angelegt. Editiert auch diese und ändert die Zeile <code><pre>./fearserver.bin</pre></code> in <code><pre>./fearserver.bin -optionsfile ServerOptions2.txt</pre></code> Nun startet screen und den ersten Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> Die zweite Screensession machen wir mit einer Tastenkombination auf:<br><br> '''STRG+a c'''<br><br> Dort starten wir nun den Server: <code><pre>./start2.sh</pre></code> ==Kurzer Exkurs zu Screen== Screen verlassen, läuft im Hintergrund weiter: Konsole zumachen, oder an der Konsole '''STRG+a d'''<br><br> '''exit''' beendet eine Konsole, bei der letzten Konsole beendet sich screen<br><br> '''screen -R''' startet die laufenden Screensessions.<br><br> '''STRG+a leer''' Schaltet zwischen den einzelnen Screensessions um. <br><br> ==Checkupscript für zwei laufende Server== Die Idee bei folgendem Script ist, dass es über einen Crontab-Eintrag in kurzen regelmäßigen Abständen prüft, ob der F.E.A.R. Server läuft. Ist dies der Fall, dann überprüft das Script, ob der Server eventuell am Überlaufen ist. D.h. ist die CPU Last über einen speziell festgelegten Schwellenwert, dann werden die Prozesse gekillt und der Server neu gestartet. Ich habe das einwenig ausgebaut, und hierbei zwei parallel laufende F.E.A.R. Server in die Überwachung genommen. Da das Skript E-Mails versendet muss ein MTA wie der Exim4 konfiguriert sein. <br><br> '''Vorbereitung für zwei Server:'''<br> Die zwei Server werden über ein eigenes Startskript aufgerufen. Zudem kopieren wir die Server Binary auf einen eienen Namen, damit der Prozess später anhand seines Namens gefunden und zur Not beendet werden kann. <br><br> Ich gehe davon aus, dass der User, '''meinfear''' heißt. Sein Verzeichnis liegt unter '''/home/meinfear'''. Das Fear Verzeichnis lautet '''FEAR'''. Das Script müsst Ihr dann entsprechend an Eure Gegebenheiten anpassen. <br><br> Die Startdatei kopieren wir wie folgt: <code><pre>cp start.sh start2.sh</pre></code> Die Binary: <code><pre>cp fearserver.bin fearserver2.bin</pre></code> In der Startdatei (start.sh und start2.sh) ändert den Inhalt etwas ab. Zum einen muss in Euer Homeverzeichnis gewechselt werden: <br><br> '''cd /home/meinfear/FEAR''' <br><br> Danach noch hinter den '''./fearserver.bin''' die Ergänzung '''-optionsfile''' mit dem ABSOLUTEN Pfad zu Eurer Serverkonfigurationsdatei. Z.B.: <br><br> '''./fearserver.bin -optionsfile /home/meinfear/FEAR/ServerOptions/ServerOptions.txt''' <br><br> Speichert die Änderungen entsprechend ab. Dann legt im Verzeichnis '''/usr/local/bin''' die Datei wie folgt an: feartest <code><pre>#!/bin/sh # F.E.A.R. Dedicated Checkup Script by Pierre "Gargi" Kretschmer top -b -n 1 | grep fearserver.bin server1=$? top -b -n 1 | grep fearserver2.bin server2=$? if [ \( $server1 = 1 \) -o \( $server2 = 1 \) ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "No active F.E.A.R. Server found. Starting new Killerspiele sessions!" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server start" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else fear1load=$(top -b -n 1 | grep fearserver.bin | cut -d " " -f20) fear2load=$(top -b -n 1 | grep fearserver2.bin | cut -d " " -f20) if [ $fear1load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/fear/meinFEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 elif [ $fear2load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else rm /var/log/fearcheck.log echo "server load ok" > /var/log/fearcheck.log fi fi </pre></code> ''(Bitte beachtet, dass bei dem Hinweis //ZEILENUMBRUCH im Skript, die markierten Zeilen in eine Zeile geschrieben werden müssen, sonst ist das Skript nicht funktionsfähig!)'' <br><br> Zu Beginn prüft das Script also, ob beide Server aktiv sind. Sind es diese nicht, oder fehlt einer der beiden Server, dann werden alle Prozesse aus dem Bereich "gekillt" und der Server neu gestartet. Fehlt wieder ein Server, wird dies beim nächsten Test wieder ausgelöst, bis alle beiden Server aktiv sind. Sind beide Server vorhanden, dann wird getestet, ob die Auslastung der einzelnen Server über 30% liegt. Sollte das der Fall sein, werden auch hier alle Prozesse getötet und die beiden Server neu gestartet. Auch hier gibt es dann eine E-Mail als Benachrichtigung. Sollte der Load unter 30 % liegen, dann passiert gar nichts und der Check kommt dann zum nächsten Lauf wieder. Man kann dieses Script dann über die Crontab ('''crontab -e''') beispielsweise alle 2 Minuten aufrufen: <code><pre>*/2 * * * * root /usr/local/bin/feartest > /dev/null</pre></code> Vergesst nicht, das Skript ausführbar zu machen: <code><pre>chmod +x /bin/feartest</pre></code> Das Skript startet zwei eigene Screen Sessions für den gleichen User. Um die Screensession aufzurufen, macht das als eingeloggter User mit einem <code><pre>screen -r server1</pre></code> oder <code><pre>screen -r server2</pre></code> Ihr könnt dann auch im Script die Bezeichnung der Sessions individuell ändern. Dies findet über dem screen Parameter -'''S''' statt. <br><br> Den Schwellenwert von den voreingestellten 30 % könnt Ihr wenn Ihr wollt auch individuell ändern. Diesen findet Ihr im if Bereich hinter dem Prüfwert '''-gt'''. Wenn ein Server generell höhere Last hat, dann kann man die auch mit entsprechend unterschiedlichen Werten versehen. 303d79c83cf77c367057ffe666be065a458cf9c9 305 303 2009-06-28T15:28:06Z Admin 1 /* Checkupscript für zwei laufende Server */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude> Der mittlerweile etwas betagte Gruselshooter F.E.A.R. aus dem Hause Sierra hat ein gutes Multiplayermodul, das sich auch heute nach ca. 3 Jahren nach Erscheinen der letzten Version 1.08 großer Beliebtheit erfreut. Zumal das Multiplayermodul F.E.A.R. Combat kostenlos downloadbar ist und somit der Multiplayer Part frei gespielt werden kann. <br><br> Die Installation auf einem Linux Server ist relativ einfach. Die Prozedur auf einem Debian Server (getestet auf meinem intel Atom 270 Server mit einem 64bit Debian 5 , Lenny) ist schnell erledigt. <br><br> Legt einen eigenen User für das Spiel an, da wir den dedicated Server nicht als root laufen lassen wollen. Falls Ihr noch einen anlegen müsst, dann macht das an der Konsole als root <code><pre>adduser meinfear</pre></code> Damit haben wir den User '''meinfear''' generiert und dieser hat sein Homeverzeichnis '''meinfear''' nun unter '''/home'''. <br><br> Jetzt benötigen wir ein paar Pakete, die wir wie folgt installieren können: <code><pre>apt-get install libstdc++5 screen</pre></code> Wenn Ihr ein 64bit System verwendet, dann muss ein Paket mehr rein: <code><pre>apt-get install libstdc++5 ia32-libs screen</pre></code> Nachdem die Pakete im System sind werden wir nun den FEAR Server installieren. Das machen wir als normaler User. Wenn Ihr noch root seid, dann wechselt nun die Userid mit einem: <code><pre>su meinfear</pre></code> und wechselt in sein Homeverzeichnis: <code><pre>cd /home/meinfear</pre></code> Nun können wir den Server herunterladen: <code><pre>wget http://www.1337-server.net/fear/fear-linuxserver-1.08.tar.gz</pre></code> Die Datei entpacken wir: <code><pre>tar -zxvf fear-linuxserver-1.08.tar.gz</pre></code> Nun haben befindet sich in Eurem Homeverzeichnis das neue Verzeichnis '''FEAR'''. Wir wechseln nun dort hin: <code><pre>cd FEAR</pre></code> und können auch schon den Server starten: <code><pre>./start.sh</pre></code> Wenn alles glatt läuft solltet Ihr diese Ausgabe sehen: <code><pre> F.E.A.R. Dedicated Linux Server - Version FEAR v1.08 Copyright (c) 2005 Monolith Productions, Inc. All rights reserved. Initializing... Map Rotation: Asylum Cafeteria Campus Construction Docks Evac Factory HighTech Office Refinery Stockpile WaterWorks Loading world: Worlds\ReleaseMultiplayer\Asylum World loaded. Ready.</pre></code> ==ServerOptions== Der Server läuft nun auf dem Standardport '''27888'''. <br> Wenn Ihr den Gamemode ändern wollt oder auch den Port, dann müsst Ihr das in der Datei '''/FEAR/ServerOptions/ServerOptions.txt '''erledigen. <br><br> Wichtig ist zunächst Folgendes in dieser Datei. <br><br> Sektion '''[ServerSettings]''': <br><br> GameType=DeathMatch ''Legt den Gametype fest (siehe darunterliegende Sektionen)''<br> ServerMessage= ''Eine Meldung, die der Server ausgibt beim Connecten''<br> UsePassword=0 ''0=kein Passwort 1=Passwortgeschützt''<br> Password=password ''Serverpasswort''<br> AllowScmdCommands=0 ''Schaltet Adminkommandos ein''<br> ScmdPassword=password ''Admin Passwort''<br> Port=27888 ''Standardport''<br> ...<br> Dedicated=1 ''0=kein dedicated Server 1= Dedicated Server''<br> ...<br> AllowVoteKick=1 ''Diverse Votingsettings''<br> AllowVoteTeamKick=1<br> AllowVoteBan=1<br> AllowVoteNextRound=1<br> AllowVoteNextMap=1<br> AllowVoteSelectMap=1<br> MinPlayersForVote=5<br> MinPlayersForTeamVote=3<br> VoteLifetime=30<br> VoteBanDuration=60<br> UsePunkBuster=0 ''Punkbuster ja oder nein. 0=nein 1=ja''<br> <br> Die darunterliegenden Sektions nehmen Einstellungen für die einzelnen Spielearten fest, welchen Ihr oben unter GameType festlegt. Ihr solltet auf alle Fälle im jeweiligen Spieletyp Euren Servernamen festlegen, damit dieser im Ingamebrowser später auch eindeutig gefunden werden kann. Den Namen legt Ihr beim Parameter <br><br> '''SessionName='''<br> <br> fest. Wie schon gesagt, den könnt Ihr für jede Spieleart anders nennen, da dieser in jeder einzelnen Sektion festgelegt werden kann. <br><br> ==Speicherzugriffsfehler== Beim Installieren auf meinen Server begrüßte mich der Server zunächst beim Start mit einem Speicherzugriffsfehler (Segmentation fault) und brach ab. Ich dachte zuerst an ein Problem mit der Architektur. Allerdings lag das in meinem Fall an der eingeschalteten Firewall. Wenn Ihr iptables am Laufen habt, dann müssen folgende Ports jeweils UDP und TCP freigeschaltet werden '''27888''' (je nachdem wie Ihr Euren Standardport setzt) und den Port '''27900 '''damit Euer Server gelistet wird. Tragt diese Ports im IN und OUT Eures Scripts ein. Danach sollte der Server starten. <br><br> ==Screen== Wenn Ihr den Server an der Konsole via ssh oder ähnlich startet, dann startet zuerst screen und dann den Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> ==Mehrere Server parallel== Wenn Ihr auf Euren Server mehrere Gamemodi beispielsweise laufen lassen wollt (der Slowmo Deathmatch ist recht schön), dann legt eine weitere ServerOptions Datei an: <code><pre>su meinfear cd /home/meinfear/FEAR/ServerOptions cp ServerOptions.txt ServerOptions2.txt</pre></code> Editiert nun die '''ServerOptions2.txt''' und legt einen neuen Standardport fest (z.B. 27889) und tragt den neuen gewünschten GameType ein. Speichert die Änderung. <code><pre>cd /home/meinfear/FEAR cp start.sh start2.sh</pre></code> Damit haben wir eine zweite Startdatei angelegt. Editiert auch diese und ändert die Zeile <code><pre>./fearserver.bin</pre></code> in <code><pre>./fearserver.bin -optionsfile ServerOptions2.txt</pre></code> Nun startet screen und den ersten Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> Die zweite Screensession machen wir mit einer Tastenkombination auf:<br><br> '''STRG+a c'''<br><br> Dort starten wir nun den Server: <code><pre>./start2.sh</pre></code> ==Kurzer Exkurs zu Screen== Screen verlassen, läuft im Hintergrund weiter: Konsole zumachen, oder an der Konsole '''STRG+a d'''<br><br> '''exit''' beendet eine Konsole, bei der letzten Konsole beendet sich screen<br><br> '''screen -R''' startet die laufenden Screensessions.<br><br> '''STRG+a leer''' Schaltet zwischen den einzelnen Screensessions um. <br><br> ==Checkupscript für zwei laufende Server== Die Idee bei folgendem Script ist, dass es über einen Crontab-Eintrag in kurzen regelmäßigen Abständen prüft, ob der F.E.A.R. Server läuft. Ist dies der Fall, dann überprüft das Script, ob der Server eventuell am Überlaufen ist. D.h. ist die CPU Last über einen speziell festgelegten Schwellenwert, dann werden die Prozesse gekillt und der Server neu gestartet. Ich habe das einwenig ausgebaut, und hierbei zwei parallel laufende F.E.A.R. Server in die Überwachung genommen. Da das Skript E-Mails versendet muss ein MTA wie der Exim4 konfiguriert sein. <br><br> '''Vorbereitung für zwei Server:'''<br> Die zwei Server werden über ein eigenes Startskript aufgerufen. Zudem kopieren wir die Server Binary auf einen eienen Namen, damit der Prozess später anhand seines Namens gefunden und zur Not beendet werden kann. <br><br> Ich gehe davon aus, dass der User, '''meinfear''' heißt. Sein Verzeichnis liegt unter '''/home/meinfear'''. Das Fear Verzeichnis lautet '''FEAR'''. Das Script müsst Ihr dann entsprechend an Eure Gegebenheiten anpassen. <br><br> Die Startdatei kopieren wir wie folgt: <code><pre>cp start.sh start2.sh</pre></code> Die Binary: <code><pre>cp fearserver.bin fearserver2.bin</pre></code> In der Startdatei (start.sh und start2.sh) ändert den Inhalt etwas ab. Zum einen muss in Euer Homeverzeichnis gewechselt werden: <br><br> '''cd /home/meinfear/FEAR''' <br><br> Danach noch hinter den '''./fearserver.bin''' die Ergänzung '''-optionsfile''' mit dem ABSOLUTEN Pfad zu Eurer Serverkonfigurationsdatei. Z.B.: <br><br> '''./fearserver.bin -optionsfile /home/meinfear/FEAR/ServerOptions/ServerOptions.txt''' <br><br> Speichert die Änderungen entsprechend ab. Dann legt im Verzeichnis '''/usr/local/bin''' die Datei wie folgt an: feartest <code><pre>#!/bin/sh # F.E.A.R. Dedicated Checkup Script by Pierre "Gargi" Kretschmer top -b -n 1 | grep fearserver.bin server1=$? top -b -n 1 | grep fearserver2.bin server2=$? if [ \( $server1 = 1 \) -o \( $server2 = 1 \) ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "No active F.E.A.R. Server found. Starting new Killerspiele sessions!" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server start" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else fear1load=$(top -b -n 1 | grep fearserver.bin | cut -d " " -f20) fear2load=$(top -b -n 1 | grep fearserver2.bin | cut -d " " -f20) if [ $fear1load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/fear/meinFEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 elif [ $fear2load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else rm /var/log/fearcheck.log echo "server load ok" > /var/log/fearcheck.log fi fi </pre></code> ''(Bitte beachtet, dass bei dem Hinweis //ZEILENUMBRUCH im Skript, die markierten Zeilen in eine Zeile geschrieben werden müssen, sonst ist das Skript nicht funktionsfähig!)'' <br><br> Zu Beginn prüft das Script also, ob beide Server aktiv sind. Sind es diese nicht, oder fehlt einer der beiden Server, dann werden alle Prozesse aus dem Bereich "gekillt" und der Server neu gestartet. Fehlt wieder ein Server, wird dies beim nächsten Test wieder ausgelöst, bis alle beiden Server aktiv sind. Sind beide Server vorhanden, dann wird getestet, ob die Auslastung der einzelnen Server über 30% liegt. Sollte das der Fall sein, werden auch hier alle Prozesse getötet und die beiden Server neu gestartet. Auch hier gibt es dann eine E-Mail als Benachrichtigung. Sollte der Load unter 30 % liegen, dann passiert gar nichts und der Check kommt dann zum nächsten Lauf wieder. Man kann dieses Script dann über die Crontab ('''crontab -e''') beispielsweise alle 2 Minuten aufrufen: <code><pre>*/2 * * * * /usr/local/bin/feartest > /dev/null</pre></code> Vergesst nicht, das Skript ausführbar zu machen: <code><pre>chmod +x /bin/feartest</pre></code> Das Skript startet zwei eigene Screen Sessions für den gleichen User. Um die Screensession aufzurufen, macht das als eingeloggter User mit einem <code><pre>screen -r server1</pre></code> oder <code><pre>screen -r server2</pre></code> Ihr könnt dann auch im Script die Bezeichnung der Sessions individuell ändern. Dies findet über dem screen Parameter -'''S''' statt. <br><br> Den Schwellenwert von den voreingestellten 30 % könnt Ihr wenn Ihr wollt auch individuell ändern. Diesen findet Ihr im if Bereich hinter dem Prüfwert '''-gt'''. Wenn ein Server generell höhere Last hat, dann kann man die auch mit entsprechend unterschiedlichen Werten versehen. 10897bb5f0aab3fcce9afbb5827b1e9cf6fc4385 Server im Eigenbau 0 86 306 97 2009-07-23T06:18:30Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt1.jpg|Serverprojekt]] <br /> ''Die Komponenten''</div> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:serverprojekt20.jpg|Notebookplatte]] <br /> ''Eine Notebookplatte von Samsung''</div> Nachdem meine Slugs entsprechend betagt sind und doch der eine oder andere Serverdienst einwenig mehr Power benötigt, war meine Überlegung, einen eigenen neuen Miniserver zu bauen. Derzeit sind die intel Atom Prozessoren recht günstig zu haben und als sparsam einzustufen, was den Stromverbrauch betrifft. Also habe ich mir ein intel Atom Board mit einer 270er CPU (1,6 GHz) zugelegt. Dazu ein Mini ITX Gehäuse mit einem externen Netzteil.<br> <br> Als Speicher verwende ich 2GB Speicher aus dem Hause OCZ, die ordentlich Luft für all die Dienste bieten. Das Zusammenbauen des Servers verlangt einwenig Geduld, da im Mini ITX Gehäuse nicht viel Platz für entsprechende Manövrierungen des Mainboards ist.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08.jpg|Platine ist eingebaut]] <br /> ''Das Board ist eingebaut''</div> Nach ein paar Versuchen sitzt das Board dann im Gehäuse und die Komponenten können normalerweise schon verbunden werden.<br> <br> Allerdings ist zu bedenken, dass der kleine Lüfter, der nicht die CPU sondern den Chipsatz kühlt, doch etwas lauter im Betrieb ist. Wer dann den Server, wie ich es vor habe, daheim im Wohnzimmer oder verbaut im Flur stehen hat, möchte natürlich nicht, dass er von einem läremnden Lüfter auf Dauer gestört wird.<br> <br> Deswegen habe ich mir noch einen kleinen Austauschlüfter besorgt (Mini-Kaze 400mm), der deutlich leiser arbeitet. Wenn natürlich alles ruhig ist, dann kann man auch diesen hören, macht aber dennoch einen deutlichen Unterschied in der Geräuschentwicklung.<br> <br> zudem habe ich noch eine kleine Notebookfestplatte aus dem Hause Samsung mit einer Kapazität von 320GB verbaut. Die Platte ist zum einen sehr leise, preislich günstig und entwickelt keine allzu große Abwärme. Das Thema Wärme ist auf jeden Fall zu beachten. Von daher habe ich noch einen Revoltec Gehäuselüfter angebracht, der die warme Luft aus dem Rechner nach außen transportiert. <br> <br> Ebenso sei anzumerken, dass die Platine einen 12Volt Anschluss besitzt, der auch verwendet werden muss. Zu diesem Zwecke habe ich einen Adapter von 12 Volt Molex auf den 4Pin Anschluss des Mainboards verwendet, über den dann auch der Rechner schließlich startet. Die zusätzlichen Komponetnen wären also Lüfter und einen Adapter, die ich noch hinzukaufen musste:<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt11.jpg|Lüfter und Adapter]] <br /> ''Lüfter und Adapter''</div> <br> Nachdem ich hier ein paar Tests gefahren habe lief der Mini-Server soweit ohne Probleme an. Die SATA Platte wurde ordentlich vom Bios erkannt und ich konnte hier schon einwenig sehen, wie die Temperaturentwicklung in dem Gehäuse aussieht. Da die CPU passiv gekühlt ist darf man natürlich in solchen kleinen Gehäusen keine Temperaturen erwarten, wie man sie normalerweise von seinem Desktop Rechner her kennt.<br> <br> Über ein externes DVD Laufwerk startete ich dann eine 64bit Debian Linux Netinstall CD und der Kernel wurde ohne Probleme geladen. Die Distribution lief auch relativ sauber durch. Ich hatte nur einwenig Schwierigkeiten beim Netzwerkchip. Hier wollte zunächst Lenny keine Netzwerkverbindung aufbauen. Nach einem Neustart ging es dann allerdings. Was ich dabei herausgefunden habe war, dass es mit dem Kernel eine 50:50 Sache war, dass der Netzwerkcontroller funktionierte. Somit mein Tipp: In so einem Fall eben so oft starten, bis eine Netzverbindung steht.<br> <br> Dieser Effekt trat bei meinem Board allerdings nur mit der 64bit Variante auf. Die 32bit Version ging soweit ohne Probleme. Auf der 64bit Basis ist das Problem mit einem neueren Kernel dann behoben. Hier empfiehlt sich umbedingt, einen neuen Kern zu installieren bzw. selbst zu kompilieren.<br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:serverprojekt17.jpg|Installation]] <br /> ''Installation im Nähzimmer''</div> Der Server musste dann noch ein paar Tests durchmachen. Zudem war es hier interessant zu sehen, wie sich die Maschine nach einiger Zeit in der Wärmeentwickung verhält. Hier muss ich sagen änderte sich nach einigen Stunden Laufzeit die Temperatur kaum. Da die CPU aber auch kein Throttling beherscht bleibt auch die Abwärme relativ konstant, wenn der Prozessor seine Betriebstemperatur erreicht hat.<br> <br> Natürlich muss noch die Secure-Shell installiert werden, damit man die Kiste irgendwann von der Tastatur und dem Monitor abklemmen kann. Nachdem ich einen neuen Kernel kompiliert und installiert habe, der auch stabil zwei Tage durchgelaufen ist war es dann soweit. Der Rechner wurde abgebaut und zu meinen Telefongerätschaften in den Schrank im Flur gestellt und dort direkt an meinen Router angeschlossen.<br> <br> Der Datendurchsatz wurde dadurch auch besser, da zu Testzwecken eine Verbindung nur über WLan (aus dem Nähzimmer) möglich war. Die Temperatur stieg allerdings dann im Schrank um ein paar Grad an, da der Luftstrom natürlich etwas eingeschränkt ist. Die Stabilität hat aber bislang nicht darunter gelitten. Ebenso erreicht die Festplatte auch keine kritische Temperatur und bleibt in der Regel um die 38°C.<br> <br> Um die komplette Anlage (DSL Modem, NTBA, Telefon und Server) vor einem Stromausfall zu schützen habe ich noch eine USV angeschlossen, die in solchen Fällen das System puffert und mit Strom versorgt. Das komplette Setup (3 x Slug, Mini Server, DSL Modem/Router und ISDN Telefon) verbraucht nun ca. 60 Watt. Wobei rund 40 Watt an den Mini- Server gehen. Der Stromverbrauch könnte noch geringer sein, da der Chipsatz hier noch am meisten Strom zieht. Es ist davon auszugehen, dass es in absehbarer Zeit sparsamere Chipsätze gibt.<br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:Schuhschrank3.jpg|Schrank]] <br /> ''Cowboys im Schuhschrank''</div> Der Rechner beherbergt nun einen Apache Webserver mit php und mysql. Zudem einen imap-Server (Dovecot) und einen ioquake3 Spieleserver. Für ftp ist der proftp zuständig und als MTA exim 4. Der Server ist soweit kaum wirklich ausgelastet, also hat ordentlich Luft für all diese Aufgaben.<br> <br> Das Gerät arbeitet soweit zuverlässig und stabil Einen Absturz oder Aufhänger hatte ich bislang noch nicht. Selbst die Dienste selbst scheinen soweit stabil zu laufen. Hier ist auch anzumerken, dass bei sowas auch ein Markenspeicher verwendet werden sollte. Ein Speicher, der nicht sauber arbeitet kann einen schier zur Verzweiflung bringen, da eine langwierige Fehlersuch im Bereich der installierten Software kaum zu einem Ergebnis führt.<br> <br> Der Server wird über einen Cronjob täglich aktualisiert und ebenso der ioquake3 Server wird automatisch neu kompiliert, sollte auf dem SVN Tree ein neuer Quellcode vorhanden sein. Entsprechende Tutorials hierzu finden sich bereits hier auf der Page, bzw. werden noch folgen.<br> <br> Neben der täglichen Aktualisierung und den regelmäßigen Kernelupdates (derzeit wird jeder neue Vanilla Kernel hierauf neu übersetzt und installiert) wird der Rechner über iptables und fail2ban gesichert. Da der Server ständig am Netz hängt ist es durchaus sinnvoll, über ein derartiges Konzept nachzudenken. Zudem haben wir noch die Hardwarefirewall, die zumindest eingehenden Traffic entsprechend filtert, bzw. unterbindet.<br> <br> b2c626a0cf2a10d5c5e69ffcc43e8f48d42c1abb 307 306 2009-07-23T06:19:06Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt1.jpg|Serverprojekt]] <br /> ''Die Komponenten''</div> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:serverprojekt20.jpg|Notebookplatte]] <br /> ''Eine Notebookplatte von Samsung''</div> Nachdem meine Slugs entsprechend betagt sind und doch der eine oder andere Serverdienst einwenig mehr Power benötigt, war meine Überlegung, einen eigenen neuen Miniserver zu bauen. Derzeit sind die intel Atom Prozessoren recht günstig zu haben und als sparsam einzustufen, was den Stromverbrauch betrifft. Also habe ich mir ein intel Atom Board mit einer 270er CPU (1,6 GHz) zugelegt. Dazu ein Mini ITX Gehäuse mit einem externen Netzteil.<br> <br> Als Speicher verwende ich 2GB Speicher aus dem Hause OCZ, die ordentlich Luft für all die Dienste bieten. Das Zusammenbauen des Servers verlangt einwenig Geduld, da im Mini ITX Gehäuse nicht viel Platz für entsprechende Manövrierungen des Mainboards ist.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08.jpg|Platine ist eingebaut]] <br /> ''Das Board ist eingebaut''</div> Nach ein paar Versuchen sitzt das Board dann im Gehäuse und die Komponenten können normalerweise schon verbunden werden.<br> <br> Allerdings ist zu bedenken, dass der kleine Lüfter, der nicht die CPU sondern den Chipsatz kühlt, doch etwas lauter im Betrieb ist. Wer dann den Server, wie ich es vor habe, daheim im Wohnzimmer oder verbaut im Flur stehen hat, möchte natürlich nicht, dass er von einem läremnden Lüfter auf Dauer gestört wird.<br> <br> Deswegen habe ich mir noch einen kleinen Austauschlüfter besorgt (Mini-Kaze 400mm), der deutlich leiser arbeitet. Wenn natürlich alles ruhig ist, dann kann man auch diesen hören, macht aber dennoch einen deutlichen Unterschied in der Geräuschentwicklung.<br> <br> zudem habe ich noch eine kleine Notebookfestplatte aus dem Hause Samsung mit einer Kapazität von 320GB verbaut. Die Platte ist zum einen sehr leise, preislich günstig und entwickelt keine allzu große Abwärme. Das Thema Wärme ist auf jeden Fall zu beachten. Von daher habe ich noch einen Revoltec Gehäuselüfter angebracht, der die warme Luft aus dem Rechner nach außen transportiert. <br> <br> Ebenso sei anzumerken, dass die Platine einen 12Volt Anschluss besitzt, der auch verwendet werden muss. Zu diesem Zwecke habe ich einen Adapter von 12 Volt Molex auf den 4Pin Anschluss des Mainboards verwendet, über den dann auch der Rechner schließlich startet. Die zusätzlichen Komponetnen wären also Lüfter und einen Adapter, die ich noch hinzukaufen musste:<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt11.jpg|Lüfter und Adapter]] <br /> ''Lüfter und Adapter''</div> <br> Nachdem ich hier ein paar Tests gefahren habe lief der Mini-Server soweit ohne Probleme an. Die SATA Platte wurde ordentlich vom Bios erkannt und ich konnte hier schon einwenig sehen, wie die Temperaturentwicklung in dem Gehäuse aussieht. Da die CPU passiv gekühlt ist darf man natürlich in solchen kleinen Gehäusen keine Temperaturen erwarten, wie man sie normalerweise von seinem Desktop Rechner her kennt.<br> <br> Über ein externes DVD Laufwerk startete ich dann eine 64bit Debian Linux Netinstall CD und der Kernel wurde ohne Probleme geladen. Die Distribution lief auch relativ sauber durch. Ich hatte nur einwenig Schwierigkeiten beim Netzwerkchip. Hier wollte zunächst Lenny keine Netzwerkverbindung aufbauen. Nach einem Neustart ging es dann allerdings. Was ich dabei herausgefunden habe war, dass es mit dem Kernel eine 50:50 Sache war, dass der Netzwerkcontroller funktionierte. Somit mein Tipp: In so einem Fall eben so oft starten, bis eine Netzverbindung steht.<br> <br> Dieser Effekt trat bei meinem Board allerdings nur mit der 64bit Variante auf. Die 32bit Version ging soweit ohne Probleme. Auf der 64bit Basis ist das Problem mit einem neueren Kernel dann behoben. Hier empfiehlt sich umbedingt, einen neuen Kern zu installieren bzw. selbst zu kompilieren.<br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:serverprojekt17.jpg|Installation]] <br /> ''Installation im Nähzimmer''</div> Der Server musste dann noch ein paar Tests durchmachen. Zudem war es hier interessant zu sehen, wie sich die Maschine nach einiger Zeit in der Wärmeentwickung verhält. Hier muss ich sagen änderte sich nach einigen Stunden Laufzeit die Temperatur kaum. Da die CPU aber auch kein Throttling beherscht bleibt auch die Abwärme relativ konstant, wenn der Prozessor seine Betriebstemperatur erreicht hat.<br> <br> Natürlich muss noch die Secure-Shell installiert werden, damit man die Kiste irgendwann von der Tastatur und dem Monitor abklemmen kann. Nachdem ich einen neuen Kernel kompiliert und installiert habe, der auch stabil zwei Tage durchgelaufen ist war es dann soweit. Der Rechner wurde abgebaut und zu meinen Telefongerätschaften in den Schrank im Flur gestellt und dort direkt an meinen Router angeschlossen.<br> <br> Der Datendurchsatz wurde dadurch auch besser, da zu Testzwecken eine Verbindung nur über WLan (aus dem Nähzimmer) möglich war. Die Temperatur stieg allerdings dann im Schrank um ein paar Grad an, da der Luftstrom natürlich etwas eingeschränkt ist. Die Stabilität hat aber bislang nicht darunter gelitten. Ebenso erreicht die Festplatte auch keine kritische Temperatur und bleibt in der Regel um die 38°C.<br> <br> Um die komplette Anlage (DSL Modem, NTBA, Telefon und Server) vor einem Stromausfall zu schützen habe ich noch eine USV angeschlossen, die in solchen Fällen das System puffert und mit Strom versorgt. Das komplette Setup (3 x Slug, Mini Server, DSL Modem/Router und ISDN Telefon) verbraucht nun ca. 60 Watt. Wobei rund 40 Watt an den Mini- Server gehen. Der Stromverbrauch könnte noch geringer sein, da der Chipsatz hier noch am meisten Strom zieht. Es ist davon auszugehen, dass es in absehbarer Zeit sparsamere Chipsätze gibt.<br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:Schuhschrank3.jpg|Schrank]] <br /> ''Cowboys im Schuhschrank''</div> Der Rechner beherbergt nun einen Apache Webserver mit php und mysql. Zudem einen imap-Server (Dovecot) und einen ioquake3 Spieleserver. Für ftp ist der proftp zuständig und als MTA exim 4. Der Server ist soweit kaum wirklich ausgelastet, also hat ordentlich Luft für all diese Aufgaben.<br> <br> Das Gerät arbeitet soweit zuverlässig und stabil Einen Absturz oder Aufhänger hatte ich bislang noch nicht. Selbst die Dienste selbst scheinen soweit stabil zu laufen. Hier ist auch anzumerken, dass bei sowas auch ein Markenspeicher verwendet werden sollte. Ein Speicher, der nicht sauber arbeitet kann einen schier zur Verzweiflung bringen, da eine langwierige Fehlersuch im Bereich der installierten Software kaum zu einem Ergebnis führt.<br> <br> Der Server wird über einen Cronjob täglich aktualisiert und ebenso der ioquake3 Server wird automatisch neu kompiliert, sollte auf dem SVN Tree ein neuer Quellcode vorhanden sein. Entsprechende Tutorials hierzu finden sich bereits hier auf der Page, bzw. werden noch folgen.<br> <br> Neben der täglichen Aktualisierung und den regelmäßigen Kernelupdates (derzeit wird jeder neue Vanilla Kernel hierauf neu übersetzt und installiert) wird der Rechner über iptables und fail2ban gesichert. Da der Server ständig am Netz hängt ist es durchaus sinnvoll, über ein derartiges Konzept nachzudenken. Zudem haben wir noch die Hardwarefirewall, die zumindest eingehenden Traffic entsprechend filtert, bzw. unterbindet.<br> <br> Pierre 55a992a42cc69d0c0bb9d036cfa3b5ec84305dd2 MediaWiki:Sidebar 8 3 308 130 2009-08-09T07:41:51Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/index_vb.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 0d67107b5229a2adc57e3ee35e1c680ef8b3c2b4 SVN Checkout Script 0 138 309 2009-08-09T07:46:35Z Admin 1 Die Seite wurde neu angelegt: „Ich habe mir einmal ein Script geschrieben, das einen speziellen SVN Tree auf neue Revisionen überprüft. Wenn es neue Revisionen gibt liest das Script alle neue...“ wikitext text/x-wiki Ich habe mir einmal ein Script geschrieben, das einen speziellen SVN Tree auf neue Revisionen überprüft. Wenn es neue Revisionen gibt liest das Script alle neue Revisionen ein und schickt die dahinter stehenden Logs als E-Mail zu. Das Script sieht wie folgt aus (für den Darkplaces Quake SVN Tree): <code><pre>#!/bin/sh mailadresse=Deine@mail.adresse mail_subject="[System] News from the Darkplaces svn tree!" ver_log=/var/log/dp_version_checkout.log rev_log=/var/log/dp_rev.log svn_tree=svn://svn.icculus.org/twilight/trunk/darkplaces svn_server=svn.icculus.org ping -c 1 $svn_server if [ $? != 0 ] then exit 1 else dp_version=$(svn info $svn_tree | grep "Revision:" | cut -d':' -f 2 | sed -e 's/ //g') if [ -f $ver_log ] then ver_old=$(cat $ver_log) else echo $dp_version > $ver_log exit 1 fi if [ $ver_old = $dp_version ] then exit 1 else steps=$(($dp_version-$ver_old)) fi rm $rev_log if [ $steps = 1 ] then echo "One new revision available:" > $rev_log else echo "$steps new revisions available:" > $rev_log fi i=1 while [ $i -le $steps ]; do rev_neu=$(($ver_old+$i)) svn log -r $rev_neu $svn_tree >> $rev_log i=`expr $i + 1` done mail -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" $mailadresse < $rev_log rm $ver_log echo $dp_version >> $ver_log fi</pre></code> ''Erklärung:'' '''mailadresse''' Da gebt Eure E-Mail Adresse an<br /> '''mail_subject''' Der Betreff, der in Eurer Mail erscheinen wird<br /> '''ver_log''' Die aktuelle Revision wird hier abgespeichert (am besten unter /var/log legen)<br /> '''rev_log''' Die ausgelesenen Revisionslogs werden hier abgespeichert. Am besten unter /var/log ablegen<br /> '''svn_tree''' Der SVN Tree, den Ihr überprüfen wollt.<br /> '''svn_server''' Der Server, auf dem der SVN Tree liegt. Die Datei speichert nachdem Ihr oben im Kopfbereich Eure Variablen entsprechend angepasst habt unter '''/usr/local/bin/xyz_svncheckup''' ab. Für das xyz schreibt am besten irgendwas Eindeutiges, um unterschiedliche Scripte eideutig unterscheiden zu können. Das Script muss natürlich ausführbar gemacht werden: <code><pre>chmod +x /usr/local/bin/xyz_svncheckup </pre></code> Hinterlegt dann den Aufruf in Eure Crontab: <code><pre>crontab -e</pre></code> Für einen stündlichen Checkup: <code><pre>0 */1 * * * /usr/local/bin/xyz_svncheckup > /dev/null</pre></code> Viele Grüße, Euer Gargi 9853f7367ef1c56125f5f967a11bf39b43742f31 310 309 2009-08-09T07:47:27Z Admin 1 wikitext text/x-wiki Ich habe mir einmal ein Script geschrieben, das einen speziellen SVN Tree auf neue Revisionen überprüft. Wenn es neue Revisionen gibt liest das Script alle neue Revisionen ein und schickt die dahinter stehenden Logs als E-Mail zu. Das Script sieht wie folgt aus (für den Darkplaces Quake SVN Tree): <code><pre>#!/bin/sh mailadresse=Deine@mail.adresse mail_subject="[System] News from the Darkplaces svn tree!" ver_log=/var/log/dp_version_checkout.log rev_log=/var/log/dp_rev.log svn_tree=svn://svn.icculus.org/twilight/trunk/darkplaces svn_server=svn.icculus.org ping -c 1 $svn_server if [ $? != 0 ] then exit 1 else dp_version=$(svn info $svn_tree | grep "Revision:" | cut -d':' -f 2 | sed -e 's/ //g') if [ -f $ver_log ] then ver_old=$(cat $ver_log) else echo $dp_version > $ver_log exit 1 fi if [ $ver_old = $dp_version ] then exit 1 else steps=$(($dp_version-$ver_old)) fi rm $rev_log if [ $steps = 1 ] then echo "One new revision available:" > $rev_log else echo "$steps new revisions available:" > $rev_log fi i=1 while [ $i -le $steps ]; do rev_neu=$(($ver_old+$i)) svn log -r $rev_neu $svn_tree >> $rev_log i=`expr $i + 1` done mail -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" $mailadresse < $rev_log rm $ver_log echo $dp_version >> $ver_log fi</pre></code> ''Erklärung:'' '''mailadresse''' Da gebt Eure E-Mail Adresse an<br /> '''mail_subject''' Der Betreff, der in Eurer Mail erscheinen wird<br /> '''ver_log''' Die aktuelle Revision wird hier abgespeichert (am besten unter /var/log legen)<br /> '''rev_log''' Die ausgelesenen Revisionslogs werden hier abgespeichert. Am besten unter /var/log ablegen<br /> '''svn_tree''' Der SVN Tree, den Ihr überprüfen wollt.<br /> '''svn_server''' Der Server, auf dem der SVN Tree liegt. Die Datei speichert nachdem Ihr oben im Kopfbereich Eure Variablen entsprechend angepasst habt unter '''/usr/local/bin/xyz_svncheckup''' ab. Für das xyz schreibt am besten irgendwas Eindeutiges, um unterschiedliche Scripte eideutig unterscheiden zu können. Das Script muss natürlich ausführbar gemacht werden: <code><pre>chmod +x /usr/local/bin/xyz_svncheckup </pre></code> Hinterlegt dann den Aufruf in Eure Crontab: <code><pre>crontab -e</pre></code> Für einen stündlichen Checkup: <code><pre>0 */1 * * * /usr/local/bin/xyz_svncheckup > /dev/null</pre></code> Viele Grüße,<br /> Euer<br /> Gargi 1ead3b9bbb7f388d5330b4efef371d938071bbc5 MediaWiki:Common.css 8 124 311 248 2009-08-15T14:23:13Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 12px; } div#p-contents { font-size: 12px; } div#p-search { font-size: 12px; } div#p-tb { font-size: 12px; } d5883481ca7b4ee9dd6b733f10ba90d741caa00f 312 311 2009-08-15T14:24:36Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 14px; } div#p-contents { font-size: 14px; } div#p-search { font-size: 14px; } div#p-tb { font-size: 14px; } 6778abef0a6b01dc196e01cb285d45569c05c18a 313 312 2009-08-15T14:25:41Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } 40fb116247b4aa123e57a071d9746a81f316b88e 314 313 2009-08-15T14:26:41Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } 494022978b70599d0ac30510f6c418f7b0e205e6 315 314 2009-08-15T14:27:27Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#"p-Server auf intel® Atom" { font-size: 13px; } ad34b403e3394652835b50b12dad59d564e5e653 316 315 2009-08-15T14:29:09Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#"p-Server_auf_intel.C2.AE_Atom { font-size: 13px; } 688a51595849c227da1cb2c92974adfdb4606258 317 316 2009-08-15T14:30:07Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#"p-Server_auf_intel.C2.AE_Atom { font-size: 13px; } div#"p-Crossover-Themen { font-size: 13px; } cf57fca43b46cc9b370f9178f7837f8bab617fcb 318 317 2009-08-15T14:31:13Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel.C2.AE_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } 3e184c76a67bed57cd841ebcba9b62b359a0a5ab 319 318 2009-08-15T14:33:33Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel.C2.AE_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } 0edd002bcca8a11dff255ec70787826d97b9b972 320 319 2009-08-15T14:34:24Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; font-size: 12px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 12px; } div#p-contents { font-size: 12px; } div#p-search { font-size: 12px; } div#p-tb { font-size: 12px; } div#p-NSLU2 { font-size: 12px; } div#p-Server_auf_intel_Atom { font-size: 12px; } div#p-Crossover-Themen { font-size: 13px; } b9428b945b17104f5ceaeffe2ed6691aeb6ea629 321 320 2009-08-15T14:36:33Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } c64f47527d2c3450940c23d0f1c9c1ec21d8c544 322 321 2009-08-15T14:37:29Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; /* font-size: 13px; */ } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ 5ec0a2031777df7cc9dde70f1381c08fe5b4870e 344 322 2010-09-01T13:34:26Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ 26815917a4ed9dfead616e382c0b2fc5e8b958a8 345 344 2010-09-01T13:42:04Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ .pBody {font-size:100%;} 8c55ee3ab6b258d743545fb94b6386e256bd2517 346 345 2010-09-01T13:42:59Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #fdfce9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #fdfce9; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} db3326ca9912241a49d2d477694d55c1a900bdfb 351 346 2011-07-05T04:24:58Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFD800; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFD800; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 8248d93d11cd0bc2ec2d624414835a5773381692 352 351 2011-07-05T04:25:42Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE770; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE770; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 6f3af0cce2ee198d756665e3c012c82f97e94d0c 353 352 2011-07-05T04:26:17Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE78F; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE78F; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} b50d52ae54cd7c5bea031e630aad030e3c31b6be 354 353 2011-07-05T04:26:44Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} f8a3fe6bc7e08c94fce73364aed9ea91c848dcf9 Apache, PHP und mySQL 0 95 323 107 2009-08-24T16:52:10Z Admin 1 wikitext text/x-wiki ==Apache 2 mit php5 installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis:<br> <br> '''/etc/apache2/'''<br> <br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> <br> <br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> Mit einem <code><pre>mysqladmin -p create tabelle01</pre></code> legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre> Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped </pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> ''phpinfo.php'' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br> <br> ==Eaccelerator installieren== Um nun den Aufruf etwas zu beschleunigen installieren wir noch ein Cachesystem, den eAccelerator. Dieser muss allerdings von Grund auf neu kompiliert werden. Installiert deswegen zuerst folgende Komponenten, die Ihr für den Compile benötigt: <code><pre>apt-get install bzip2 build-essential php5-dev</pre></code> Jetzt legen wir unter dem Hauptverzeichnis ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> wir wechseln dahin: <code><pre>cd work</pre></code> Danach holen wir uns die aktuelle Version (Bitte auf der eaccelerator Projektseite nach der aktuellen Versionsnummer schauen): <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> Danach wird ausgepackt: <code><pre>tar xvfj eaccelerator-0.9.5.3.tar.bz2</pre></code> Und in das korrekte Verzeichnis gewechselt: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Danach bereiten wir den Compile vor: <code><pre> phpize ./configure --with-eaccelerator-userid=nobody </pre></code> Kompilieren: <code><pre>make</pre></code> Installieren: <code><pre>make install</pre></code> Wir müssen nun die eaccelerator.ini anlegen: <code><pre>touch /etc/php5/conf.d/eaccelerator.ini</pre></code> Füllt diese Datei mit Eurem präferierten Editor mit folgendem Inhalt: <code><pre>extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/var/cache/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"</pre></code> Danach müssen wir noch das Verzeichnis anlegen, in dem gecacht werden soll. Dieses ist in der eaccelerator.ini vorgegeben: <code><pre>mkdir -p /var/cache/eaccelerator</pre></code> Danach müssen noch die Zugriffsrechte neu geregelt werden: <code><pre>chmod 0777 /var/cache/eaccelerator</pre></code> Startet den Apache nun neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Damit wir testen können, ob der eaccelerator und alle anderen sonstigen Dienste laufen, schauen wir uns nochmal die phpinfo.php an. Wenn der eaccelerator läuft seht Ihr folgenden Abschnitt:<br> [[Bild:eac.jpg|eaccelerator]]<br> Bitte beachtet, dass Ihr den eAccelerator jedes Mal neu kompilieren müsst, sobald eine neue php Version installiert wird, da es sonst zu Versionskonflikten kommt und der Apache Webserver nicht startet. Wenn Ihr keinen Zugriff nach einem php Update habt, dann schaut Euch die '''/var/log/apache2/error.log''' an, dort wird in der Regel ein entsprechender Hinweis zu finden sein. Um einen neuen Kompile zu starten muss vorher das Entwicklerverzeichnis aufgeräumt werden. Also in Eurem eAccelerator Work Verzeichnis ein <code><pre>make clean</pre></code> ausführen. Danach die Prozedur wie oben beschrieben und dann den Apache neu starten: <code><pre>/etc/init.d/apache2 restart</pre></code><br> Damit wäre der Webserver soweit eingerichtet. <br> <br> 1d57d16c3c1726acc5074532e29c08e1fe5358b8 Firewalling: iptables und Fail2Ban 0 102 324 116 2009-08-26T21:52:22Z Admin 1 /* Firewall Script mit iptables */ wikitext text/x-wiki ==fail2ban auf Debian Lenny installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh # script written by Gargi 2009 http://www.gargi.org #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> Viele Grüße!<br> Gargi e1267ade668973c021588cf84669e9a6a749d0d6 Chkrootkit 0 26 325 35 2009-09-07T13:44:45Z Admin 1 wikitext text/x-wiki ==Wanzenjagd mit Chkrootkit== Wer seine kleine Schachtel ständig am Netz hängen lässt ist vor Angreifern natürlich nicht sicher. Deswegen ist Umsichtigkeit sowohl in den Logs als auch bei den systemkritischen Dateien erstes Gebot! Die Linuxwelt spricht weniger von Viren, sondern bekannter sind Rootkits, die wichtige Systemdateien verändern damit der Angreifer Kontrolle über das System erlangt. Aber auch hierfür gibt es Tools, um zu prüfen, wie der Stand der Dinge ist. Ein regelmäßiger Check seines Servers ist auf jeden Fall erstes Gebot. In den Repositories der NSLU2 gibt es leider hierzu kein entsprechendes Tool, also werden wir selbst Hand anlegen. Wir werden dazu das bekannte Werkzeug chkrootkit verwenden. Die dazugehörige Page findet Ihr hier [http://www.chkrootkit.org/] Damit auf der Slug überhaupt etwas kompiliert werden kann müssen die Build-Tools installiert werden. Diese benötigen ca. 150 MB auf der Festplatte. <code><pre>ipkg install optware-devel</pre></code> Danach legen wir uns ein beliebiges Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln in dieses rein: <code><pre>cd work</pre></code> Jetzt holen wir uns das Quellpaket ab: <code><pre>wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz</pre></code> Das Paket entpacken wir mit einem lässigen <code><pre>tar -zvxf chkrootkit.tar.gz</pre></code> Der Quellcode liegt nun in einem neuen Verzeichnis. Wie dieses heisst erfahrt Ihr mit einem <code><pre>ls -l 4096 Feb 2 14:20 chkrootkit-0.47 37791 Feb 2 13:59 chkrootkit.tar.gz</pre></code> Hier sieht man, dass das Verzeichnis chkrootkit-0.47 heißt. Wechselt nun in dieses Verzeichnis: <code><pre>cd chkrootkit-0.47</pre></code> Danach müssen wir noch einen Suchpfad setzen, damit das mit dem Compiler klappt: <code><pre>export PATH=$PATH:/opt/bin:.</pre></code> Jetzt legen wir mit einem <code><pre>make</pre></code> los. Der Vorgang dauert nicht lange. Damit das Programm auch arbeitet brauchen wir noch das netstat Tool: <code><pre>ipkg install net-tools</pre></code> Jetzt können wir das Tool aus dem gleichen Verzeichnis heraus mit <code><pre>./chkrootkit</pre></code> starten. Der Output ist dann denke ich selbsterklärend. Ich weiße darauf hin, dass bei eventuell gefunden Infektionen erstmal geschaut werden muss, welche Datei davon betroffen ist. Da die Software auf der NSLU2 angepasst ist muss das nicht zwangsläufig bedeuten, dass tatsächlich eine Infektion vorliegt, sondern die eine oder andere Datei von der Suchroutine als infiziert markiert wird, weil diese vielleicht vom Standardcode anderer Linuxversionen abweicht (Falschmeldung). Sollte sich aber aber im Laufe der Zeit zusätzlich etwas verändern, dann ist es HÖCHSTE Eisenbahn, sein System vom Netz zu nehmen und auf die Suche zu gehen. '''Zusätzlich:''' Nehmt die Quellcodes wieder von der Platte, damit hier nichts manipuliert werden kann. Das kompilierte Programm könnt Ihr in ein beliebiges Verzeichnis verschieben. [[Bild:serverprojekt08kl.jpg]] 051ea177962d0ecb1f3ed8957e3bdc15e87cffc4 326 325 2009-09-07T13:45:30Z Admin 1 /* Wanzenjagd mit Chkrootkit */ wikitext text/x-wiki ==Wanzenjagd mit Chkrootkit== Wer seine kleine Schachtel ständig am Netz hängen lässt ist vor Angreifern natürlich nicht sicher. Deswegen ist Umsichtigkeit sowohl in den Logs als auch bei den systemkritischen Dateien erstes Gebot! Die Linuxwelt spricht weniger von Viren, sondern bekannter sind Rootkits, die wichtige Systemdateien verändern damit der Angreifer Kontrolle über das System erlangt. Aber auch hierfür gibt es Tools, um zu prüfen, wie der Stand der Dinge ist. Ein regelmäßiger Check seines Servers ist auf jeden Fall erstes Gebot. In den Repositories der NSLU2 gibt es leider hierzu kein entsprechendes Tool, also werden wir selbst Hand anlegen. Wir werden dazu das bekannte Werkzeug chkrootkit verwenden. Die dazugehörige Page findet Ihr hier [http://www.chkrootkit.org/] Damit auf der Slug überhaupt etwas kompiliert werden kann müssen die Build-Tools installiert werden. Diese benötigen ca. 150 MB auf der Festplatte. <code><pre>ipkg install optware-devel</pre></code> Danach legen wir uns ein beliebiges Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln in dieses rein: <code><pre>cd work</pre></code> Jetzt holen wir uns das Quellpaket ab: <code><pre>wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz</pre></code> Das Paket entpacken wir mit einem lässigen <code><pre>tar -zvxf chkrootkit.tar.gz</pre></code> Der Quellcode liegt nun in einem neuen Verzeichnis. Wie dieses heisst erfahrt Ihr mit einem <code><pre>ls -l 4096 Feb 2 14:20 chkrootkit-0.47 37791 Feb 2 13:59 chkrootkit.tar.gz</pre></code> Hier sieht man, dass das Verzeichnis chkrootkit-0.47 heißt. Wechselt nun in dieses Verzeichnis: <code><pre>cd chkrootkit-0.47</pre></code> Danach müssen wir noch einen Suchpfad setzen, damit das mit dem Compiler klappt: <code><pre>export PATH=$PATH:/opt/bin:.</pre></code> Jetzt legen wir mit einem <code><pre>make</pre></code> los. Der Vorgang dauert nicht lange. Damit das Programm auch arbeitet brauchen wir noch das netstat Tool: <code><pre>ipkg install net-tools</pre></code> Jetzt können wir das Tool aus dem gleichen Verzeichnis heraus mit <code><pre>./chkrootkit</pre></code> starten. Der Output ist dann denke ich selbsterklärend. Ich weiße darauf hin, dass bei eventuell gefunden Infektionen erstmal geschaut werden muss, welche Datei davon betroffen ist. Da die Software auf der NSLU2 angepasst ist muss das nicht zwangsläufig bedeuten, dass tatsächlich eine Infektion vorliegt, sondern die eine oder andere Datei von der Suchroutine als infiziert markiert wird, weil diese vielleicht vom Standardcode anderer Linuxversionen abweicht (Falschmeldung). Sollte sich aber aber im Laufe der Zeit zusätzlich etwas verändern, dann ist es HÖCHSTE Eisenbahn, sein System vom Netz zu nehmen und auf die Suche zu gehen. '''Zusätzlich:''' Nehmt die Quellcodes wieder von der Platte, damit hier nichts manipuliert werden kann. Das kompilierte Programm könnt Ihr in ein beliebiges Verzeichnis verschieben. [[Bild:home_game_server.png]] cf3bf664bf0efbd4f10892dc2a770399143f91cf 328 326 2009-09-07T13:46:45Z Admin 1 wikitext text/x-wiki ==Wanzenjagd mit Chkrootkit== Wer seine kleine Schachtel ständig am Netz hängen lässt ist vor Angreifern natürlich nicht sicher. Deswegen ist Umsichtigkeit sowohl in den Logs als auch bei den systemkritischen Dateien erstes Gebot! Die Linuxwelt spricht weniger von Viren, sondern bekannter sind Rootkits, die wichtige Systemdateien verändern damit der Angreifer Kontrolle über das System erlangt. Aber auch hierfür gibt es Tools, um zu prüfen, wie der Stand der Dinge ist. Ein regelmäßiger Check seines Servers ist auf jeden Fall erstes Gebot. In den Repositories der NSLU2 gibt es leider hierzu kein entsprechendes Tool, also werden wir selbst Hand anlegen. Wir werden dazu das bekannte Werkzeug chkrootkit verwenden. Die dazugehörige Page findet Ihr hier [http://www.chkrootkit.org/] Damit auf der Slug überhaupt etwas kompiliert werden kann müssen die Build-Tools installiert werden. Diese benötigen ca. 150 MB auf der Festplatte. <code><pre>ipkg install optware-devel</pre></code> Danach legen wir uns ein beliebiges Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln in dieses rein: <code><pre>cd work</pre></code> Jetzt holen wir uns das Quellpaket ab: <code><pre>wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz</pre></code> Das Paket entpacken wir mit einem lässigen <code><pre>tar -zvxf chkrootkit.tar.gz</pre></code> Der Quellcode liegt nun in einem neuen Verzeichnis. Wie dieses heisst erfahrt Ihr mit einem <code><pre>ls -l 4096 Feb 2 14:20 chkrootkit-0.47 37791 Feb 2 13:59 chkrootkit.tar.gz</pre></code> Hier sieht man, dass das Verzeichnis chkrootkit-0.47 heißt. Wechselt nun in dieses Verzeichnis: <code><pre>cd chkrootkit-0.47</pre></code> Danach müssen wir noch einen Suchpfad setzen, damit das mit dem Compiler klappt: <code><pre>export PATH=$PATH:/opt/bin:.</pre></code> Jetzt legen wir mit einem <code><pre>make</pre></code> los. Der Vorgang dauert nicht lange. Damit das Programm auch arbeitet brauchen wir noch das netstat Tool: <code><pre>ipkg install net-tools</pre></code> Jetzt können wir das Tool aus dem gleichen Verzeichnis heraus mit <code><pre>./chkrootkit</pre></code> starten. Der Output ist dann denke ich selbsterklärend. Ich weiße darauf hin, dass bei eventuell gefunden Infektionen erstmal geschaut werden muss, welche Datei davon betroffen ist. Da die Software auf der NSLU2 angepasst ist muss das nicht zwangsläufig bedeuten, dass tatsächlich eine Infektion vorliegt, sondern die eine oder andere Datei von der Suchroutine als infiziert markiert wird, weil diese vielleicht vom Standardcode anderer Linuxversionen abweicht (Falschmeldung). Sollte sich aber aber im Laufe der Zeit zusätzlich etwas verändern, dann ist es HÖCHSTE Eisenbahn, sein System vom Netz zu nehmen und auf die Suche zu gehen. '''Zusätzlich:''' Nehmt die Quellcodes wieder von der Platte, damit hier nichts manipuliert werden kann. Das kompilierte Programm könnt Ihr in ein beliebiges Verzeichnis verschieben. c1b8e673f532908f175afdcf8a8c760d68559cc6 Datei:Home game server.png 6 139 327 2009-09-07T13:45:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Hauptseite 0 1 329 297 2009-10-10T10:00:05Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/index_vb.php . Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ 911eeb1529dfed0e86ba79b885a1d94cfa6fe937 330 329 2010-06-15T19:02:31Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (mein Blog, der leider eingeschlafen ist) :http://www.gargamel.de (sehr alte Page mit meinem noch heute gut besuchten Milkshape 3D Tutorial) </div> __NOTOC__ __NOEDITSECTION__ ba360aed4398baf14cfad49a85142875f9edd819 MediaWiki:Sidebar 8 3 331 308 2010-06-15T19:04:23Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES a6e9a3b5b26b004efbaf274959cf9e7a2531502e 359 331 2012-10-03T09:58:56Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES f9639225cbcfd9b1448ccfaa97d7dbb9bc270445 Slug als Webserver 0 4 332 8 2010-09-01T13:22:59Z Admin 1 wikitext text/x-wiki '''Achtung neu:''' Ich habe ein Forum für Eure Fragen zur NSLU2 / SLUG eingerichtet. Die Mailingliste ist zugunsten des Forums aufgelöst. Ihr findet das Forum unter http://www.gargi.org oder über die Sidebar unter community/kontact (Browsercache leeren, falls der Menüpunkt nicht zu sehen ist).<br /> '''Hinweis:''' Bitte verwendet einen aktuellen Browser. Mit Browsern in einer älteren Version werden oftmals Teile der Textformatierung nicht korrekt angezeigt. <br /> <br /> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding:20px"> __TOC__ </div><noinclude> ==Was ist eine NSLU2?== ... zumindest dachte ich mir das, als ich zum ersten Mal davon hörte. NSL steht als Abkürzung für '''N'''etwork '''S'''torage '''L'''ink. Das '''U''' selbst kann Unit oder auch USB bedeuten. Dieses spezielle Gerät, das hier auf dieser Seite etwas näher besprochen wird, wird von der Firma Linksys http://www.linksys.com vertrieben.<br /> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div> Derartige Geräte werden vom Grund her als Server für Datenspeicher innerhalb eines Netzwerkes verwendet. D.h. an einer NSL-Box wird ein Datenträger angeschlossen, z.B. eine externe USB-Festplatte oder ein Flashspeicher, der für alle Geräte innerhalb eines Netzwerkes zur Verfügung steht, je nachdem der Zugriff auf den Datenspeicher geregelt ist. Vielerorts werden für solche einfachen Aufgaben ganze Rechner in einem Netzwerk abgestellt. Der Vorteil solcher Lösungen liegt klar auf der Hand: Sie sind einfach zu konfigurieren, nehmen weniger Platz als ein kompletter Rechner ein, verbrauchen weniger Strom als ein "echter" Server und sind natürlich kostengünstig. Derzeit kostet ein neues NSLU2 um die 80,- Euro. Wer eine ausrangierte Festplatte zur Verfügung hat, der muss nur noch ca. 40,- Euro für ein USB-Gehäuse berappen. Somit kommt eine derartige Lösung auf rund 120,- Euro. Sie lässt sich somit recht einfach verbauen und stört auch nicht durch irgendwelche Laufgeräusche, da das Gerät selbst keine Lüfter verwendet. Hörbar ist nur eventuell die externe Platte selbst. Aber der Geräuschpegel hängt ebenso stark von der Qualität der verbauten Platte ab. Betrieben wird das Gerät dann an einem Switch oder auch Router, über den sämtliche Zugriffe innerhalb des Netzwerkes geregelt werden. Bei Anschaffung eines Routers, der vermutlich Anfragen auf ein DSL-Modem weiterleiten soll, sind für den erweiterten Betrieb einer NSLU2 (Web- Und/oder FTP-Server) folgende Eigenschaften von Vorteil: *Firewall/Virtual Server Routing: Hier wird die Anfrage von außerhalb gesteuert. Möchte man z.B. auf eine Website zugreifen, dann leitet der Router diese Anfrage auf eine festgelegte interne IP-Nummer weiter. Diese ist dann eben die für den NSLU2 festgelegte IP. *Dynamic DNS: Da man bei der Wiederanwahl in das Internet in der Regel eine neue IP bekommt, wird der Zugriff auf einen eigenen Server unnötig erschwert. Hierzu legt man sich dann z.B. über Dynamic Network Services DynDNS http://www.dyndns.org Namen fest, der dann bei der Wiedereinwahl die eigene IP-Nummer automatisch übermittelt bekommt. Somit ist man immer über den festgelegten Domain-Namen erreichbar und muss somit nicht mehr mit komplizierten IP-Nummern hantieren. *Auto Reconnect: Der Router sollte sich selbständig wieder an das Internet verbinden, sobald die Verbindung seitens des Providers getrennt wird. Hier bitte zwei Dinge beachten: Zum einen ist dies natürlich nur interessant, wenn ein zeit- und volumenunabhängiger Tarif abgeschlossen wurde, also eine klassische Flatrate. Alles andere wird TEUER!!! Zum anderen bitte darauf achten, ob hierbei nicht vertragliche Regelungen seitens Eures Providers derartige Nutzung untersagen. Bitte informiert Euch über beide WICHTIGEN Dinge. Denn beides kann Geld kosten! <div style="float:left;padding-right:20px"> [[Bild:nslu2_2.jpg|NSLU2]] </div> '''Wieso nun gerade dieses Gerät?''' Nach kurzer Zeit hat sich herausgestellt, dass im Inneren der NSLU2 ein normales Linux schlummert, das nun viel mehr kann, als nur Daten über das Netz zu schaufeln. Muss auch so sein, denn das Gerät wird über ein Web-Interface administriert, was zumindest schonmal einen Webserver im Inneren vermuten lässt. Und noch viel mehr! Der Datenspeicher ist zudem ein Samba-Server, der nun betriebssystemunabhängig verschiedene Betriebssysteme versorgen kann. Nachdem findige Leute die Maschine sich zur Brust genommen haben, war es sehr schnell möglich, weitere Programme hierauf zum Laufen zu bringen. Somit kann das Gerät auch als normaler Webserver, als FTP-Server, Mail-Server und auch für den Anschluss einer Webcam genutzt werden. Dabei verliert es nicht die Funktionalität, die es von Haus aus mitbringt: Ein Datenserver im Netz zu sein. Ich werde nun hier diverse Bearbeitungsschritte protokollieren, die ich selbst an diesem Gerät anhand diverser Anleitungen im Netz (div. FAQs und Newsgroup-Beiträge) durchprobiert habe, um zu demonstrieren, wieviel Power in diesem erstmal recht unscheinbar wirkenden Gerät steckt. Genug, um hierbei auch ein kleines Büro mit Daten zu versorgen und über das Internet für einen Datenaustausch erreichbar zu machen. '''All gates are open now!''' <br /> <br /> <br /> <br /> <br /> <br /> ==Wie flashe ich das Gerät?== <div style="float:right;padding-left:20px"> [[Bild:slug01.png|NSLU2]] </div> Dies könnt Ihr im Adminpanel mittels dieses Tools durchführen. Zuerst bitte die Festplatten abstöpseln. Beim Update darf die Festplatte '''NICHT''' angeschlossen sein. Jetzt als Admin ('''Administration''' anklicken) anmelden und auf '''Advanced'''. Hier dann Upgrade anklicken. Die Firmware als *.bin- File kann dann dort angegeben werden. Danach auf "'''Start Upgrade'''" klicken und abwarten. Das Tool startet die NSLU2 dann selbständig. Bitte den Updatevorgang NICHT unterbrechen. Es dauert in der Tat einwenig, bis Ihr eine Erfolgsmeldung bekommt und das Gerät neu gestartet wird. Nach dem Reboot solltet Ihr dann einen Hinweis auf der Startseite über Euere neue Firmware finden. Die aktuelle Firmware bekommt Ihr unter folgender URL: http://www.slug-firmware.net/u-dls.php. Die Originalfirmware gibt es unter dieser Adresse [http://www.linksys.com/servlet/Satellite?c=L_Download_C2&childpagename=US%2FLayout&cid=1115417109974&packedargs=sku%3D1115416906769&pagename=Linksys%2FCommon%2FVisitorWrapper]. Sollte das Gerät dabei "zerflasht" werden ist Ruhe zu bewahren! Man glaubt es fast kaum, aber ich persönlich habe den Eindruck, dass man mit einem großen Hammer auf die Kiste hauen muss, damit es tatsächlich kaputt ist. In den meisten Fällen läßt sich ein fehlgeschlagener Flash auch wieder retten, ohne dass das Gerät eingeschickt werden muss. Dazu bitte mein Kapitel "Notoperation!" lesen. Wer sich es zutraut, kann auch auf diese Art und Weise gleich die Firmware auf den internen Speicher schreiben. <br /> <br /> <br /> <br /> <br /> <br /> ==Notoperation!== Sollte irgendwann mal nichts mehr gehen, dann muss eine kleine Notoperation durchgeführt werden. Symptom: Das Gerät läßt sich nichtmehr ansteuern, kein Ping funktioniert und auch das mitgelieferte Setup-Programm von CD erkennt das Teil nicht mehr. Um das zu reparieren muss das Gerät neu geflasht werden. Ihr benötigt dazu ein Biosfile (bitte Version 2.3R25 [ftp://ftp.linksys.com/pub/network/nslu2-fw-2.3r25.zip] ) und einen Flasher, den Ihr HIER [http://www.nslu2-linux.org/wiki/Main/SercommFirmwareUpdater] herunterladen könnt. Den Flasher installiert dann gleich mal bevor Ihr weiter macht. ===Variante 1 (Windows)=== '''1.)''' Zuerst muss das Netzwerk auf '''192.168.0.x''' umgestellt werden. Dabei darf die Nummer '''192.168.0.1''' von keinem weiteren Gerät belegt sein, denn diese benötigt unsere kleine Box. '''2.)''' Steckt nun das Gerät an, schaltet es aber noch nicht ein! Jetzt eine Telnetsession mit '''telnet 192.168.0.1 9000''' aufmachen, aber '''NOCH NICHT''' mit Enter abschicken, sondern erstmal nur in die Dos-Shell eingeben! '''3.)''' Jetzt muss es ganz schnell gehen! Schickt den Telnetbefehl ab und drückt dabei gleichzeitig die Einschalttaste am Gerät. Wenn die Anzeige "'''Verbinden....'''" in eine erste Biosmeldung umschaltet müsst Ihr sofort die Taste''' STRG+C''' drücken. Wenn Ihr nun ein "RedBoot>" am Prompt erscheinen seht, dann seid Ihr "drin". Falls nicht muss die Prozedur wiederholt werden, bis Ihr den richtigen Moment trefft. '''4.)''' Nun gebt "'''upgrade'''" ein und drückt '''Enter'''. Jetzt müßte ein Status-LED am Gerät grün/orange (bei neueren Geräten dunkelorange/orange) blinken. '''5.)''' Startet nun das installierte Upgrade-Utility. Wählt hier Eure Netzwerkkarte aus und auf "'''Browse'''"->"'''Browse''' '''Targets'''" klicken. Nun müsstet Ihre eine MAC-Adresse sehen, die Ihr anklickt. Dann auf Files und Euer Bios (*.bin Datei) auswählen. Auf '''Öffnen''' klicken und mit '''OK''' bestätigen. Jetzt startet den Upgradevorgang indem Ihr auf den Button '''Upgrade''' drückt. '''6.)''' Das alles dauert nun ne kleine Weile. Zuerst wird das Eeprom gelöscht, danach neu aufgespielt und dann überprüft. Es versteht sich von selbst, dass hier nicht unterbrochen werden darf! Wenn alles gut gelaufen ist, dann sollte die Meldung "'''Upgrade succsessfully'''" erscheinen, die Ihr mit "'''OK'''" wegklickt. '''7.)''' Das Gerät startet von selbst neu. (Also wartet bis zum nächsten Piepsignal) '''8.)''' Falls Ihr nun unter der alten IP nicht mehr auf Euer Gerät kommt, dann wurde es auf '''192.168.1.77''' zurückgestellt. Das deutet allerdings auf einen Fehler hin, der sich mit einer Fehlermeldung im Adminpanel zeigt: "'''Can't get Samba Information'''". Wenn das der Fall ist, dann muss noch der Configbereich im Eeprom gelöscht werden. Macht nochmal einen RedBoot wie oben beschrieben. Gebt dann am Prompt folgendes ein: '''fis erase -f 0x50040000 -l 0x20000''' (Hinweis: das -l ist ein kleines L !!!) Bitte genau dies eingeben! Bei einen Tippfehler kann das Eeprom beschädigt werden! Danach ein '''reset''' eingeben. Dann funktioniert auch die Eingabe der Serverinfos im Administartionspanel wieder. '''HINWEIS:''' Es kann leider sein, dass neuer Netzwerkkarte vom UGUTIL nicht erkannt werden. Hierzu ist dann eine ältere Standard-Karte zu diesem Zwecke einzusetzen. Bei mir wurde der onboardchip eines Nforce4 Chipsatzes nicht erkannt. Dafür der Netgear WG111v2 USB Wlan-Stick. Ob ein Update über Funk ratsam ist sollte jeder für sich entscheiden. '''HINWEIS 2:''' Bevor unter Windows ein Update vorgenommen wird, sollte die Softwarefirewall kurzfristig dafür abgeschalten werden. Dies kann nur nervige Sperrungen hervorrufen, die das Updaten verzögern. '''HINWEIS 3:''' UGUTIL läuft leider nicht unter Vista 64bit <br /> <br /> <br /> ===Variante 2 (Linux)=== Der meine ich etwas einfachere Weg geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="Unslung-6.8-beta.bin"</pre></code> ''(das Beispiel gilt für die im Moment aktuelle 6.8 Firmware) '' Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="Unslung-6.8-beta.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre>linux:/home/test/Work/upslug2 # ./upslug2 --image="Unslung-6.8-beta.bin" LK........... xx:xx:xx:xx:xx:xx Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LK............. xx:xx:xx:xx:xx:xx . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Nachdem die Kiste automatisch neu startet ist die neue Firm wieder drauf. <br /> <br /> <br /> <br /> ==Unslingen und User einrichten== Zuerst wird über das Administrationspanel die neue Firmware eingespielt. Das funktioniert menügesteuert. Danach müssen wir das Gerät "entsichern", damit eine Telnet-Session zugelassen wird und wir in das geheiligte Innere der Maschine gelangen können. '''1.''' Startet die Kiste ohne angeschlossener Festplatte. Ruft jetzt im Browser unter Angabe der IP nebst des eventuell von Euch neu eingestellten voreingestellten Ports folgende URL auf: '''http://192.168.1.77:8080/Management/telnet.cgi''' Hier werdet Ihr nach dem Adminpasswort gefragt. Sollte das nicht verstellt sein, dann lautet es werkseitig admin:admin . Jetzt könnt Ihr bequem auf einen Button klicken, um die Telnetsession zu "enablen" (aktivieren). Vergesst bitte nicht, wenn Ihr mit Euren Arbeiten an der Slug fertig seid, hier wieder auf "disable" zu klicken, damit die Maschine vor Zugriffen gesichert ist. '''''Hinweis:''' Ab de unslug Version 6.8 kann man dies auch komfortabel auf der Startseite des Administrationspanel erledigen!!!'' Schaltet nun von Eurer Shell aus auf eine Telnetsession '''telnet [IP der Slug]''' '''''Hinweis:''' Ein sehr schönes Tool hierzu ist der Putty. Die Projektseite dazu findet Ihr hier: PuTTY: http://www.putty.nl/ Richtet ein Profil für die NSLU2 im Putty ein (in der Konfiguration telnet anklicken, die IP der Slug eintragen und als neues Profil mit einem Namen -z.B. nslu2 - abspeichern) und legt eine Verknüpfung an. Diese erweitert Ihr mit dem Parameter -load [profilname] , also unter Windows mit unserem nslu2 Profil z.B. putty.exe -load nslu2 . Dann genügt ein Doppelklick auf die Verknüpfung und Ihr habt schon eine Telnetverbindung zum gewünschten Client vor Euch auf dem Bildschirm.'' '''''Hinweis''''': Damit später auch die NSLU2 von der Konsole aus auf die Repositories zugreifen kann, muss im Webadmin noch ein Gateway eingetragen werden! Dies ist in der Regel die IP Eures Routers! Ohne diesen erhaltet Ihr beim Installieren von zusätzlichen Paketen eine Fehlermeldung. '''2.''' Telnet auf die Box und hier nun mit root:'''uNSLUng''' anmelden. Wenn Ihr als Root angemeldet seid, erhaltet Ihr in etwa diese Meldung: <code><pre>login: root Password: No directory, logging in with HOME=/ Welcome to Unslung V2.3R63-uNSLUng-6.8-beta -------- NOTE: RUNNING FROM INTERNAL FLASH -------- This system is currently running from the internal flash memory, it has NOT booted up into "unslung" mode from an external drive. In this mode, very few services are running, and available disk space is extremely limited. This mode is normally only used for initial installation, and system maintenance and recovery. BusyBox v0.60.4 (2005.03.22-06:52+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands.</pre></code> Danach die Festplatte wieder anschließen. Wartet nun ab, bis die Box die Festplatte als angeschlossen anzeigt (grünes LED an der Box, oder über das Web-Adminpanel). Jetzt seid Ihr in der Box schonmal drin. Damit nun das Betriebsystem auf die Festplatte ausgelagert wird (unslingen) gebt nun folgenden Befehl an der Konsole ein: '''/sbin/unsling disk2''' Ab der Firmwareversion 6.8 wird die Festplatte hierzu an den USB-Port 2 angeschlossen. Danach kann hier sogar ein root-Passwort eingegeben werden, was dann für das System generell gilt. Wenn das Unslingen fertig ist das Gerät neu starten. Die Platte bleibt am USB-Port2!!! Es dauert eine Weile, bis die Sache erledigt ist. Jetzt kann aufgrund des wesentlich größeren Speicherplatzes später entsprechend neue Software installiert werden. '''3.''' Ruft in Euerem Browser das Administrationspanel auf und legt einen neuen User an (z.B. testi). Dieser soll auch ruhig ein Heimatverzeichnis bekommen, also hier das im Konfigmenü auswählen. Speichern und beenden. Das neue Heimatverzeichnis liegt dann im Wurzelverzeichnis und trägt den Namendes Users, also in unserem Beispiel "/testi" '''4.''' In der Telnetkonsole dann '''vi /etc/passwd''' eingeben. Mit "i" in den Editmodus wechseln. '''5.''' Sucht nun die Zeile mit <code><pre>Testi:xyzverschlüsseltes.passwort:2002:501:::/dev/null</pre></code> Damit nun später die bash verwendet werden kann und auf das Verzeichnis auch via ftp ein Zugriff erfolgen kann, werden wir die Zeile hinten abändern. Dazu legen wir nochmal das Heimatverzeichnis des Users fest: <code><pre>testi:xyzverschlüsseltes.passwort:2002:501::/testi:/bin/sh</pre></code> '''6.''' Mit "'''ESC'''" den Editmodus verlassen. mit ":w" speichern und ":q" beenden. '''7.''' Zum Schluß updaten wir die Slug gleich und sehen dabei, ob unser neuer User wirklich Rootrechte hat. Hierzu folgendes ausführen: '''ipkg update'''<br /> '''ipkg upgrade''' Danach werden automatisch die neuesten Pakete gezogen und installiert. Zudem sollten noch folgende Einstellungen im Webadmin gemacht werden: Ruft dazu Eure Konfiguration auf und geht auf '''Administration - > System'''. Dann entfernt die Haken vor -> Enable Guest Logins<br /> -> Enable FTP-Server<br /> -> Enable UPnP Support '''Wichtig''' ist, dass Ihr noch den Port des Webadmins von 80 auf einen anderen ändert (8282 oder ähnliches). Den Port 80 benötigt Ihr dann für Euren Apache. Die Konfig sollte dann in etwa wie folgt aussehen: [[Bild:slug03.jpg|center]] '''''Hinweis:''' Ihr müsst nicht jedes mal den Webadmin bemühen, um die Slug neu zu starten. Ebenso ist es nicht notwendig, jedes Mal aufzustehen, und das Knöpfchen direkt am Gerät zu drücken. Wenn Ihr eh schon in der Konsole eingeloggt seid, dann geht das über zwei lockere Befehle am Prompt:'' '''sync'''<br /> '''reboot''' <br /> <br /> <br /> ==bash installieren== Ziel ist es, die bash soweit zu installieren, dass jeder User entsprechend die gleiche bash verwendet. Ich beziehe mich dabei auf die Anleitung von unslung.de, passe diese allerdings hie und da einwenig an, um vielleicht das eine oder andere einwenig chronologischer in der Beschreibung darzustellen. '''1)''' Alles passiert natürlich unter telnet. Loggt Euch mit Euerem root-Account ein, und installiert zuerst die bash: '''ipkg install bash''' '''2)''' Falls noch nicht geschehen legen wir unter '''etc''' eine Datei '''profile''' an und editieren diese gleich: '''vi /etc/profile''' ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' '''3)''' Nun fügen wir folgende zwei Zeilen in die Datei ein: '''export PS1="\[\033[1;33m\]\u@\h\[\033[0;37m\]:/> "'''<br/> und GANZ ZUM SCHLUSS '''test -f /opt/bin/bash && exec /opt/bin/bash''' Wer's etwas freundlicher beim Begrüßen mag, der kann oben in der '''etc/profile''' noch folgende Zeilen ergänzen: <code><pre>echo --------------------------------------------------------------------- echo "Hallo $USER, willkommen auf der Slug! ;-)" echo --------------------------------------------------------------------- echo </pre></code> '''4)''' Als nächstes legen wir im root-Verzeichnis die '''.bashrc''' an: '''vi /.bashrc''' In diese Datei können wir einige hilfreiche aliase und Umgebungsvariablen setzen. Ich empfehle folgende Zeilen einzugeben: <code><pre>alias "d=ls -la" alias "dir=ls -la" export PATH=$PATH:~/bin:. </pre></code> '''5)''' Die '''.bashrc''' muss nun in jedes Userverzeichnis kopiert werden, das sich im Rootverzeichnis befindet. <br /> <br /> <br /> ==Midnight Commander installieren== '''1)''' Zuerst muss das Programm installiert werden: '''ipkg install mc''' (falls vorher noch nicht geschehen, dann zuerst '''ipkg update''' eingeben!) '''2)''' Falls noch nicht geschehen, die Datei '''/etc/profile''' anlegen und editieren: '''vi /etc/profile''' '''3)''' Dort zwei Zeilen ergänzen: <code><pre>export TERMINFO=/opt/lib/terminfo export TERM=xterm-pcolor</pre></code> '''4)''' System neu starten. '''5)''' Midnight Commander mit '''/opt/bin/mc''' starten. Falls Ihr die bash installiert habt, könnt Ihr auch in der '''.bashrc''' folgendes ergänzen: '''alias "mc=/opt/bin/mc"''' Das macht die Sache recht praktisch, denn so wird das Programm ganz einfach mit einem '''mc''' in der shell gestartet. <br /> <br /> <br /> <br /> ==FTP-Server einrichten (vsftpd)== '''1)''' Zuerst legt man ein leeres Verzeichnis an:<br /> '''mkdir -p /usr/share/empty''' '''2)''' Vsftp-Daemon installieren:<br /> '''ipkg install vsftpd''' '''3)''' rc.xinetd Datei anlegen und mit Inhalt füllen:<br /> '''vi /unslung/rc.xinetd''' Dann im vi-Editor den Editmodus mit Drücken der Taste "i" aktivieren und folgendes abtippen: <code><pre>#!/bin/sh if ( [ ! -f /etc/inetd.conf ] || !(grep vsftpd /etc/inetd.conf -q) ) then echo "ftp stream tcp nowait root /opt/sbin/vsftpd /opt/etc/vsftpd.conf" >>/etc/inetd.conf fi return 1</pre></code> Bitte HAARKLEIN GENAU abschreiben! Bitte zweimal kontrollieren! Dann Edit-Modus mit "ESC" beenden und mit<br /> ''':w'''<br /> abspeichern und mit<br /> ''':q'''<br /> beenden '''4)''' vsftpd.conf editieren, damit jeder angemeldete User nur seinen eigenen Bereich sehen kann, und nicht in Toplevel wechseln kann: '''vi /opt/etc/vsftpd.conf''' Hier dann im Edit-Modus (Taste "i" !) folgende Zeile am Schluss ergänzen: '''chroot_local_user=YES''' Abspeichern und beenden! '''5)''' Logdatei für den ftp-Daemon erstellen:<br /> '''mkdir -p /opt/var'''<br /> '''mkdir -p /opt/var/log'''<br /> '''touch /opt/var/log/vsftpd.log''' '''6)''' Ersten User anlegen: Im normalen Adminpanel einen neuen User anlegen. Nennen wir ihn hier als Beispiel "upload". Dieser bekommt auch beim Erstellen ein Homedirectory auf der Platte zugesprochen. Jetzt müssen wir noch die passwd anpassen: '''vi /etc/passwd''' Den User "upload" suchen. Die Zeile sieht dann in etwa so aus: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501:::/dev/null</pre></code> Das ändern wir dann in folgender Weise ab: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501::/upload:/bin/sh</pre></code> Da auf der Slug nun alles auf dem USB-Port2 liegt, wäre das korrekte Verzeichnis '''/share/flash''' ... Wir umgehen das damit, indem wir den die Verlinkung unter '''/root''' verwenden. Somit wird dem User ein festes Heimatverzeichnis zugewiesen, das sich eben auf der Platte befindet. Das alles wie oben schon beschrieben dann speichern und beenden. '''7 )''' Die NSLU dann neu starten und mit einem ftp-Clienten oder via Webbrowser <code><pre>ftp://username:deinpasswort@ipnummerdernslu ausprobieren.</pre></code> Noch ein Tipp: Wenn man ein laufendes Protokoll sich anzeigen lassen möchte, dann macht eine Telnet-Session auf und gebt folgendes ein: '''tail -f /opt/var/log/vsftpd.log''' Dann habt Ihr immer im Blick, was gerade auf dem Server passiert. '''Hinweis 1:''' Solltet Ihr einen Tippfehler bei der Erstellung der /share/hdd/conf/unslung/rc.xinetd gebaut haben und startet das Dingens via Neustart der Kiste oder mit dem Befehl /etc/rc.d/rc.xinetd, dann kann es sein, dass Ihr eben keinen Zugriff via ftp bekommt. Ihr entdeckt dann zwar den Fehler im /share/hdd/conf/unslung/rc.xinetd aber auch nach Korrektur startet der FTP-Server nicht. Das liegt nun daran, dass beim ersten Start die Zeile echo"ftp... " in das /etc/rc.d/rc.xinetd Script MIT ÜBERNOMMEN wurde. Also hier dann den Fehler, sollte er in der echo-Zeile entstanden sein, auch ausbessern! Dann klappt es! Die Festplatte zu löschen und neu zu unslingen bringt auch nichts, da das etc/rc.d/rc.xinetd auf dem Flashspeicher liegt. Hier müsste man die Firm dann komplett neu aufspielen. Aber da lässt sich sicher besagte Datei einfacher und schneller editieren. <br /> <br /> <br /> ==Der Apache Webserver== Der Apache Webserver ist auf der Slug schnell installiert. Hierzu wird sich erstmal als root per telnet eingeloggt. Danach führen wir den Befehl '''ipkg install apache''' aus. Das System wird automatisch konfiguriert und der Webserver gestartet. Dieser liegt allerdings auf dem Port 8000. Ruft den Server nun mit '''[eure ip adresse]:8000''' auf. Es ergibt dann folgendes Bild: [[Bild:slug04.jpg|center]] Um den Apache nun anzupassen rufen wir die Konfigurationsdatei des Apache auf: '''vi /opt/etc/apache2/httpd.conf''' Wichtige Zeile/ Einträge: '''Listen 8000''' gibt den Standardport an. Ändert dies auf '''80''', um den normalen Port eines Webservers zu verwenden. '''DocumentRoot "/opt/share/www"''' legt fest, wo Eure Webfiles liegen. Idealerweise legt hier einen User an, den Ihr per ftp erreichen könnt. Auf dieses Userverzeichnis schreibt diese Zeile um. Z.b. nennt sich der User webserver . Also lautet die Zeile dann: '''DocumentRoot "/webserver"''' '''<Directory "/opt/share/www">''' muss ebenso angepasst werden (z.B. '''<Directory "/webserver">''' ) '''DirectoryIndex index.html index.html.var''' Diese Zeile ergänzt dann noch durch ein "'''index.htm''' und '''index.php'''" , damit auch Pages mit der htm und php Extention geladen werden können. Das sollten die wichtigsten Punkte sein. Im Internet finden sich noch eine Vielzahl an weiteren Konfigurationsmöglichkeiten für den Apache. Speichert Euere Änderungen ab. Kopiert nun eine Testpage auf Euer Webverzeichnis und startet die Slug neu. Nun müsste nach einer kurzen Wartezeit der Webserver mit Eurer normalen IP abrufbar sein. '''''Hinweis:''' Bei Eurem Webserver bitte die Files immer via ftp und nicht dem Samba-Share hochladen. Denn nur über einem ftp-Upload ist sichergestellt, dass Ihr keinen Access-Error wegen mangelnder Zugriffsrechte bekommt.'' <br /> <br /> <br /> ==PHP Erweiterung für Apache== Zuerst loggen wir uns wieder als root via einer Telnetsession ein. Danach installieren wir zwei Pakete: '''ipkg install php-apache eaccelerator''' Jetzt starten wir den Apache neu, indem wir folgenden Befehl absetzen: '''/opt/etc/init.d/S80apache''' Jetzt legen wir folgenden Code auf unsere Homepage: <code><pre><?php phpinfo() ?></pre></code> Das File speichern wir als "'''phpinfo.php'''" ab. Dieses rufen wir dann über unseren Browser auf: '''[deine ip nummer]/phpinfo.php''' Wenn alles funktioniert sollte dies in der Art zu sehen sein: [[Bild:slug05.jpg|center]] Dieses Script gibt nun Auskunft, welche Version des Apache und des PHP installiert ist. Hinweis! Sollte der php-Aufruf nur einen Plain-Text bringen, dann kann es sein das in einer möglichen neuern Apache Version der php-Aufruf in der '''/opt/etc/apache2/httpd.conf''' fehlt. Ergänzt hierfür am Ende der Datei folgende Zeilen: <code><pre>LoadModule php5_module libexec/libphp5.so AddType application/x-httpd-php .php .phtml</pre></code> <br /> <br /> <br /> ==Mysql Datenbank installieren== Mysql selbst installieren wir über ein Konsolenfenster als root. Hierzu gebt folgenden Installationsbefehl ein: '''ipkg install php-mysql''' Nachdem die Pakete installiert sind setzen wir sofort ein root- Passwort für die Datenbank: '''/opt/bin/mysqladmin -u root password dein_passwort''' Jetzt legen wir eine neue Datenbank mit den Namen Beispiel an: '''/opt/bin/mysqladmin -p create beispiel''' ''Hier muss nun Euer Passwort eingegeben werden '' Das wären die ersten wirklichen Fingerübungen am Prompt, was die Datenbank betrifft. Damit der Webserver die Datenbank auch sauber integriert startet die Slug einfach neu: '''sync'''<br /> '''reboot''' Ruft nun nochmal Euer phpinfo-Script auf, wie ich es im PHP-Abschnitt beschrieben habe. Im Bereich "'''addidional .ini files parsed'''" muss jetzt die '''mysql.ini''' stehen: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:slug06.jpg|NSLU2]]</div> Wer jetzt natürlich nicht unbedingt sich die Finger beim Eingeben von cryptischen Befehlszeilen am Prompt brechen möchte, wenn er seine Datenbank administriert, der braucht auch nicht auf seiner kleinen Slug auf die Vorzüge der grafischen Administration via phpmyadmin zu verzichten. Das Programmpaket kann man sich unter http://www.phpmyadmin.net herunterladen. Das entpackt man dann auf seinen Webserver und legt wie gehabt seine '''config.inc.php''' an. Bitte konsultiert die beiliegende Doku, um den genauen Installationsvorgang in Erfahrung zu bringen. Weiteres würde über den mir gesteckten Rahmen dieser Dokumentation hinaus gehen. Wenn Ihr die Dateien oben habt und die Zugriffe in der config geregelt habt, dann solltet Ihr das phpmyadmin wie gewohnt benutzen können: <br /> [[Bild:slug07.jpg|center]] '''''Hinweis:''' Hier ist es ratsam, über ein htaccess File das Verzeichnis zu schützen, auf dem das phpmyadmin abgelegt ist. Sonst kann ja jeder in der Datenbank herumpfuschen.'' ===Exkurs: htacces anlegen=== Das ist einwenig kniffeliger, aber ich denke, dass man das, wenn man sich Schritt für Schritt an meine Anleitung hält machbar. Zuerst müssen wir dem Apache erklären, dass er nicht nur Friedenspfeifen rauchen soll, sondern auch gesicherte Verzeichnisse zu verwalten hat. Dazu müssen wir seine Konfigurationsdatei "nachbehandeln". In einer telnet-Session rufen rufen wir diese als root im vi-Editor auf: '''vi /opt/etc/apache2/httpd.conf''' Die Zeile '''AllowOverride None''' muss auf '''AllowOverride All'''<br /> ''( i oder Einfg. zum Editieren drücken, ESC zum Verlassen des Editmodus)'' gesetzt werden. Dann mit :w speichern und mit :q verlassen. Jetzt startet den Apache wieder neu, damit die neue config eingelesen wird: '''/opt/etc/init.d/S80apache''' Somit sind wir entsprechend vorbereitet, die gewünschten Verzeichnisse zu sichern. Wir wollen nun das Verzeichnis des Webservers /phpmyadmin absichern. Dieses liegt auf der Slug Beispielsweise unter /webserver/phpmyadmin . Legt nun eine Datei .htaccess mittels vi an '''vi /webserver/phpmyadmin/.htaccess''' und füllt diese mit folgenden Zeilen: <code><pre>AuthType Basic AuthName Phpmyadmin AuthUserFile /webserver/phpmyadmin/.htpasswd require valid-user</pre></code> Hinter "'''AuthName'''" könnt Ihr eine beliebige Bezeichnung setzen. Diese wird dann nur eben später am Eingabefenster des Browsers angezeigt, wenn nach dem Passwort gefragt wird. Man kann natürlich noch einige Erweiterungen in die '''htaccess''' mit aufnehmen. Hierzu bietet sich ein sehr schönes Onlinekonfigurationsprogramm an, das Ihr unter folgender URL [http://www.harbeck-is.de/tools/htaccess_gen/htaccess_loader.php] abrufen könnt. Allerdings sollte unsere Konfig für das Erste genügen. Dann legen wir die Passwortdatei '''.htpasswd''' an. Dazu liefert uns der Apache ein Tool, das uns auch die Passwörter entsprechend verschlüsselt. <code><pre>htpasswd -C .htpasswd username</pre></code> Gebt nun das Passwort ein. Einen weiteren User legt Ihr mit <code><pre>htpasswd .htpasswd neueruser</pre></code> an. Macht auch diese Datei lesbar: <code><pre>chmod 644 .htpasswd</pre></code> Sollte der Aufruf '''htpasswd''' nicht funktionieren, so habt Ihr in der '''etc/profile''' den entsprechenden Suchpfad nicht eingetragen. Ihr könnt Euch auch kurzfristig damit behelfen: <code><pre> export PATH=$PATH:/opt/sbin:.</pre></code> Ansonsten solltet Ihr eh folgende Zeilen in die '''/etc/profiles''' aufnehmen: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Es funktionieren dann auch komplexere Anwendungen, wie z.B. das bekannte phpbb-Forum ( Download hier: http://www.phpbb.com/ ) Hinweise zur Installation entnehmt bitte der beiliegenden Dokumentation.<br /> Testinstallation: [[Bild:slug08.jpg|center]] <br /> <br /> ==Zeitgesteuerte Events - Die Crontab== Ihr könnt natürlich wie unter jedem Linux-System zweitgesteuerte Events, wie z.B. Sicherungen über die Crontab steuern. Im Internet findet Ihr eine Vielzahl an Seiten, die den genauen Aufbau der Crontab beschreiben. Da wir einen Webserver haben und mit einer Datenbank arbeiten, macht es Sinn, die Datenbank regelmäßig auf ein extra Verzeichnis zu speichern. Wir gehen in unserem Beispiel davon aus, dass wir die Datenbank "beispiel" alle 30 Minuten speichern wollen. Zuerst legen wir ein Script an, das unsere Datenabank wegsichert. Idealerweise habt Ihr einen weiteren user (z.B. test) angelegt, auf den Ihr ftp-Zugriff habt. In dessen Verzeichnis werden wir die Datenbank "dumpen". Die Datei legen wir wieder mit dem guten alten vi an: '''vi /usr/sbin/sqldump.sh''' Der Code sieht im Groben wie folgt aus: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) datenbankname > /zielverzeichnis/datenbankname.sql --default-character-set=utf8</pre></code> (bitte die /opt/bin ... in eine Zeile schreiben) In unserem Beispiel also: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) beispiel > /test/beispiel.sql --default-character-set=utf8</pre></code> Als Passwort (dann ohne die Klammern!!!) gebt Ihr Euer admin-Passwort ein, das Ihr bei der mysql-Installation festgelegt habt. Speichert die Datei ab. Jetzt müssen wir die Datei noch ausführbar machen. Das funktioniert über ein lockeres '''chmod +x /usr/sbin/sqldump.sh''' Testet das Script einfach, indem Ihr das Datenbank-Dumping per Hand startet: '''/usr/sbin/sqldump.sh''' Nun editieren wir die Crontab. Das machen wir alte Linux-Hasen wieder über den vi: '''vi /etc/crontab''' fügt ans Ende der Datei folgende Zeile ein: '''*/30 * * * * root /usr/sbin/sqldump.sh &>/dev/null''' Die Crontab sollte nun ungefähr so aussehen: <code><pre>SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ # ---------- ---------- Default is Empty ---------- ---------- # 0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null 0 0 * * * root /usr/sbin/WatchDog &>/dev/null 1 * * * * root /usr/sbin/hwclock -s &>/dev/null */30 * * * * root /usr/sbin/sqldump.sh &>/dev/null</pre></code> Speichert Euere Änderungen ab. Danach startet die Slug neu, damit die Crontab auch wieder neu eingelesen wird: '''sync'''<br /> '''reboot''' Prüft dann bei Gelegenheit nach, ob Ihr tatsächlich immer neue Sicherungen in Euer Sicherungsverzeichnis "gedumpt" bekommt. <br /> <br /> <br /> ==Prozessverwaltung mit htop== Unter Linux kennen wir alle das fast schon überlebensnotwendige '''top''' , das uns aktuelle Prozesse anzeigt und uns ermöglicht, auch einen unerwünschten Prozess zu "'''killen'''", wie es in der Linuxwelt so lautmalerisch tatsächlich heißt. Für die Slug gibt es ein ähnliches Programm, das sogar einwenig komfortabler gestaltet ist: '''htop'''. Installiert htop einfach mit einem <code><pre>ipkg install htop</pre></code> Legt dann noch eine Verknüpfung zu diesem Tool an: <code><pre>ln -s /opt/bin/htop /bin/htop</pre></code> Danach könnt Ihr das Programm ganz bequem mit <code><pre>htop</pre></code> starten. Ihr solltet dann folgendes Bild zu sehen bekommen: [[Bild:slug09.png|center]] Interessant hierbei ist noch die Darstellung der CPU Auslastung und der Speicherbelegung. Man sieht damit alles sehr schön auf einen Blick. <br /> <br /> <br /> ==Die Secure-Shell== Wer nicht ständig über das doch ungeschützte telnet auf seine Box zugreifen möchte, kann dies auch über die Secure-Shell (ssh) erledigen. Dazu installiert diese einfach mit einem <code><pre>ipkg install openssh</pre></code> Der Vorteil hierbei ist, dass nicht jedes Mal der Telnet aktiviert werden muss und die Angelegenheit entsprechend verschlüsselt über den Äther geht. <br /> <br /> <br /> ==Mehrere Konsolen mit Screen== Das kleine Programm Gnu Screen [http://www.gnu.org/software/screen/] ermöglicht den User auf einer Konsole mehrere Screens, also Konsolen zu aktivieren, zwischen denen man bequem umschalten kann. So kann beispielsweise eine Log-Datei mit tail oder der htop mitlaufen, während man am nächsten Screen weitere Arbeiten tätigt. Installiert wird Screen einfach durch ein <code><pre>ipkg install screen</pre></code> Das Programm wird dann an der Konsole mit einem <code><pre>/opt/bin/screen</pre></code> gestartet. Soltet Ihr '''/opt bin''' bereits als Suchpfad integriert haben, dann genügt ein <code><pre>screen</pre></code> Damit auch im "Screen" die bash verwendet wird, legt in Eurem Home-Verzeichnis des Users, der eben screen starten darf eine Konfigurationsdatei an: <code><pre>vi .screenrc</pre></code> Dort ergänzt Ihr die folgende Zeile: '''shell bash''' Speichert diese und startet screen neu. Wenn Ihr den Willkommensscreen abstellen wollt, dann schreibt folgende Zeile in die .screenrc: '''startup_message off''' Folgende Befehle solltet Ihr Euch merken: '''Strg+a c''' Startet eine neue Konsole<br /> '''Strg+a''' leer schaltet zwischen den Konsolen um<br /> '''exit''' beendet die Konsole (wenn eine Konsole übrig wird screen beendet)<br /> '''Strg+a d''' beendet screen, screen läuft aber im Hintergrund weiter<br /> '''screen -R''' startet wieder die im Hintergrund noch laufende Screen-Session<br /> Der wesentliche Vorteil von screen ist, dass alle Programme, die Ihr innerhalb der Screen-Session startet, auch dann weiter laufen, wenn Ihr Euch aus der Slug ausloggt. Somit könnt Ihr beispielsweise einen großen Download mittels curl starten, müsst aber nicht den nohup Befehl verwenden, sondern könnt jeder Zeit wieder Euch einloggen und mittels '''screen -R''' die Session aufnehmen und beispielsweise den statistischen Output von curl Euch ansehen. <br /> <br /> <br /> ==Datum und Uhrzeit einstellen== Dies könnt Ihr als root an der Konsole erledigen. Gebt dazu folgendes ein: <code><pre>date MONAT|TAG|STUNDE|MINUTE|JAHR</pre></code> Also wenn es der 4.12.2007 23:24 sein soll, dann muss der Befehl so aussehen: <code><pre>date 120423242007</pre></code> Über den Webadmin könnt Ihr dann zusätzlich noch die Uhrzeit für das Webpanel einstellen. <br /> <br /> <br /> 260538af04933c8646c5623c7b2f9582e3f19567 333 332 2010-09-01T13:24:26Z Admin 1 wikitext text/x-wiki '''Achtung neu:''' Ich habe ein Forum für Eure Fragen zur NSLU2 / SLUG eingerichtet. Die Mailingliste ist zugunsten des Forums aufgelöst. Ihr findet das Forum unter http://www.gargi.org oder über die Sidebar unter community/kontact (Browsercache leeren, falls der Menüpunkt nicht zu sehen ist).<br /> '''Hinweis:''' Bitte verwendet einen aktuellen Browser. Mit Browsern in einer älteren Version werden oftmals Teile der Textformatierung nicht korrekt angezeigt. <br /> <br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Was ist eine NSLU2?== ... zumindest dachte ich mir das, als ich zum ersten Mal davon hörte. NSL steht als Abkürzung für '''N'''etwork '''S'''torage '''L'''ink. Das '''U''' selbst kann Unit oder auch USB bedeuten. Dieses spezielle Gerät, das hier auf dieser Seite etwas näher besprochen wird, wird von der Firma Linksys http://www.linksys.com vertrieben.<br /> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div> Derartige Geräte werden vom Grund her als Server für Datenspeicher innerhalb eines Netzwerkes verwendet. D.h. an einer NSL-Box wird ein Datenträger angeschlossen, z.B. eine externe USB-Festplatte oder ein Flashspeicher, der für alle Geräte innerhalb eines Netzwerkes zur Verfügung steht, je nachdem der Zugriff auf den Datenspeicher geregelt ist. Vielerorts werden für solche einfachen Aufgaben ganze Rechner in einem Netzwerk abgestellt. Der Vorteil solcher Lösungen liegt klar auf der Hand: Sie sind einfach zu konfigurieren, nehmen weniger Platz als ein kompletter Rechner ein, verbrauchen weniger Strom als ein "echter" Server und sind natürlich kostengünstig. Derzeit kostet ein neues NSLU2 um die 80,- Euro. Wer eine ausrangierte Festplatte zur Verfügung hat, der muss nur noch ca. 40,- Euro für ein USB-Gehäuse berappen. Somit kommt eine derartige Lösung auf rund 120,- Euro. Sie lässt sich somit recht einfach verbauen und stört auch nicht durch irgendwelche Laufgeräusche, da das Gerät selbst keine Lüfter verwendet. Hörbar ist nur eventuell die externe Platte selbst. Aber der Geräuschpegel hängt ebenso stark von der Qualität der verbauten Platte ab. Betrieben wird das Gerät dann an einem Switch oder auch Router, über den sämtliche Zugriffe innerhalb des Netzwerkes geregelt werden. Bei Anschaffung eines Routers, der vermutlich Anfragen auf ein DSL-Modem weiterleiten soll, sind für den erweiterten Betrieb einer NSLU2 (Web- Und/oder FTP-Server) folgende Eigenschaften von Vorteil: *Firewall/Virtual Server Routing: Hier wird die Anfrage von außerhalb gesteuert. Möchte man z.B. auf eine Website zugreifen, dann leitet der Router diese Anfrage auf eine festgelegte interne IP-Nummer weiter. Diese ist dann eben die für den NSLU2 festgelegte IP. *Dynamic DNS: Da man bei der Wiederanwahl in das Internet in der Regel eine neue IP bekommt, wird der Zugriff auf einen eigenen Server unnötig erschwert. Hierzu legt man sich dann z.B. über Dynamic Network Services DynDNS http://www.dyndns.org Namen fest, der dann bei der Wiedereinwahl die eigene IP-Nummer automatisch übermittelt bekommt. Somit ist man immer über den festgelegten Domain-Namen erreichbar und muss somit nicht mehr mit komplizierten IP-Nummern hantieren. *Auto Reconnect: Der Router sollte sich selbständig wieder an das Internet verbinden, sobald die Verbindung seitens des Providers getrennt wird. Hier bitte zwei Dinge beachten: Zum einen ist dies natürlich nur interessant, wenn ein zeit- und volumenunabhängiger Tarif abgeschlossen wurde, also eine klassische Flatrate. Alles andere wird TEUER!!! Zum anderen bitte darauf achten, ob hierbei nicht vertragliche Regelungen seitens Eures Providers derartige Nutzung untersagen. Bitte informiert Euch über beide WICHTIGEN Dinge. Denn beides kann Geld kosten! <div style="float:left;padding-right:20px"> [[Bild:nslu2_2.jpg|NSLU2]] </div> '''Wieso nun gerade dieses Gerät?''' Nach kurzer Zeit hat sich herausgestellt, dass im Inneren der NSLU2 ein normales Linux schlummert, das nun viel mehr kann, als nur Daten über das Netz zu schaufeln. Muss auch so sein, denn das Gerät wird über ein Web-Interface administriert, was zumindest schonmal einen Webserver im Inneren vermuten lässt. Und noch viel mehr! Der Datenspeicher ist zudem ein Samba-Server, der nun betriebssystemunabhängig verschiedene Betriebssysteme versorgen kann. Nachdem findige Leute die Maschine sich zur Brust genommen haben, war es sehr schnell möglich, weitere Programme hierauf zum Laufen zu bringen. Somit kann das Gerät auch als normaler Webserver, als FTP-Server, Mail-Server und auch für den Anschluss einer Webcam genutzt werden. Dabei verliert es nicht die Funktionalität, die es von Haus aus mitbringt: Ein Datenserver im Netz zu sein. Ich werde nun hier diverse Bearbeitungsschritte protokollieren, die ich selbst an diesem Gerät anhand diverser Anleitungen im Netz (div. FAQs und Newsgroup-Beiträge) durchprobiert habe, um zu demonstrieren, wieviel Power in diesem erstmal recht unscheinbar wirkenden Gerät steckt. Genug, um hierbei auch ein kleines Büro mit Daten zu versorgen und über das Internet für einen Datenaustausch erreichbar zu machen. '''All gates are open now!''' <br /> <br /> <br /> <br /> <br /> <br /> ==Wie flashe ich das Gerät?== <div style="float:right;padding-left:20px"> [[Bild:slug01.png|NSLU2]] </div> Dies könnt Ihr im Adminpanel mittels dieses Tools durchführen. Zuerst bitte die Festplatten abstöpseln. Beim Update darf die Festplatte '''NICHT''' angeschlossen sein. Jetzt als Admin ('''Administration''' anklicken) anmelden und auf '''Advanced'''. Hier dann Upgrade anklicken. Die Firmware als *.bin- File kann dann dort angegeben werden. Danach auf "'''Start Upgrade'''" klicken und abwarten. Das Tool startet die NSLU2 dann selbständig. Bitte den Updatevorgang NICHT unterbrechen. Es dauert in der Tat einwenig, bis Ihr eine Erfolgsmeldung bekommt und das Gerät neu gestartet wird. Nach dem Reboot solltet Ihr dann einen Hinweis auf der Startseite über Euere neue Firmware finden. Die aktuelle Firmware bekommt Ihr unter folgender URL: http://www.slug-firmware.net/u-dls.php. Die Originalfirmware gibt es unter dieser Adresse [http://www.linksys.com/servlet/Satellite?c=L_Download_C2&childpagename=US%2FLayout&cid=1115417109974&packedargs=sku%3D1115416906769&pagename=Linksys%2FCommon%2FVisitorWrapper]. Sollte das Gerät dabei "zerflasht" werden ist Ruhe zu bewahren! Man glaubt es fast kaum, aber ich persönlich habe den Eindruck, dass man mit einem großen Hammer auf die Kiste hauen muss, damit es tatsächlich kaputt ist. In den meisten Fällen läßt sich ein fehlgeschlagener Flash auch wieder retten, ohne dass das Gerät eingeschickt werden muss. Dazu bitte mein Kapitel "Notoperation!" lesen. Wer sich es zutraut, kann auch auf diese Art und Weise gleich die Firmware auf den internen Speicher schreiben. <br /> <br /> <br /> <br /> <br /> <br /> ==Notoperation!== Sollte irgendwann mal nichts mehr gehen, dann muss eine kleine Notoperation durchgeführt werden. Symptom: Das Gerät läßt sich nichtmehr ansteuern, kein Ping funktioniert und auch das mitgelieferte Setup-Programm von CD erkennt das Teil nicht mehr. Um das zu reparieren muss das Gerät neu geflasht werden. Ihr benötigt dazu ein Biosfile (bitte Version 2.3R25 [ftp://ftp.linksys.com/pub/network/nslu2-fw-2.3r25.zip] ) und einen Flasher, den Ihr HIER [http://www.nslu2-linux.org/wiki/Main/SercommFirmwareUpdater] herunterladen könnt. Den Flasher installiert dann gleich mal bevor Ihr weiter macht. ===Variante 1 (Windows)=== '''1.)''' Zuerst muss das Netzwerk auf '''192.168.0.x''' umgestellt werden. Dabei darf die Nummer '''192.168.0.1''' von keinem weiteren Gerät belegt sein, denn diese benötigt unsere kleine Box. '''2.)''' Steckt nun das Gerät an, schaltet es aber noch nicht ein! Jetzt eine Telnetsession mit '''telnet 192.168.0.1 9000''' aufmachen, aber '''NOCH NICHT''' mit Enter abschicken, sondern erstmal nur in die Dos-Shell eingeben! '''3.)''' Jetzt muss es ganz schnell gehen! Schickt den Telnetbefehl ab und drückt dabei gleichzeitig die Einschalttaste am Gerät. Wenn die Anzeige "'''Verbinden....'''" in eine erste Biosmeldung umschaltet müsst Ihr sofort die Taste''' STRG+C''' drücken. Wenn Ihr nun ein "RedBoot>" am Prompt erscheinen seht, dann seid Ihr "drin". Falls nicht muss die Prozedur wiederholt werden, bis Ihr den richtigen Moment trefft. '''4.)''' Nun gebt "'''upgrade'''" ein und drückt '''Enter'''. Jetzt müßte ein Status-LED am Gerät grün/orange (bei neueren Geräten dunkelorange/orange) blinken. '''5.)''' Startet nun das installierte Upgrade-Utility. Wählt hier Eure Netzwerkkarte aus und auf "'''Browse'''"->"'''Browse''' '''Targets'''" klicken. Nun müsstet Ihre eine MAC-Adresse sehen, die Ihr anklickt. Dann auf Files und Euer Bios (*.bin Datei) auswählen. Auf '''Öffnen''' klicken und mit '''OK''' bestätigen. Jetzt startet den Upgradevorgang indem Ihr auf den Button '''Upgrade''' drückt. '''6.)''' Das alles dauert nun ne kleine Weile. Zuerst wird das Eeprom gelöscht, danach neu aufgespielt und dann überprüft. Es versteht sich von selbst, dass hier nicht unterbrochen werden darf! Wenn alles gut gelaufen ist, dann sollte die Meldung "'''Upgrade succsessfully'''" erscheinen, die Ihr mit "'''OK'''" wegklickt. '''7.)''' Das Gerät startet von selbst neu. (Also wartet bis zum nächsten Piepsignal) '''8.)''' Falls Ihr nun unter der alten IP nicht mehr auf Euer Gerät kommt, dann wurde es auf '''192.168.1.77''' zurückgestellt. Das deutet allerdings auf einen Fehler hin, der sich mit einer Fehlermeldung im Adminpanel zeigt: "'''Can't get Samba Information'''". Wenn das der Fall ist, dann muss noch der Configbereich im Eeprom gelöscht werden. Macht nochmal einen RedBoot wie oben beschrieben. Gebt dann am Prompt folgendes ein: '''fis erase -f 0x50040000 -l 0x20000''' (Hinweis: das -l ist ein kleines L !!!) Bitte genau dies eingeben! Bei einen Tippfehler kann das Eeprom beschädigt werden! Danach ein '''reset''' eingeben. Dann funktioniert auch die Eingabe der Serverinfos im Administartionspanel wieder. '''HINWEIS:''' Es kann leider sein, dass neuer Netzwerkkarte vom UGUTIL nicht erkannt werden. Hierzu ist dann eine ältere Standard-Karte zu diesem Zwecke einzusetzen. Bei mir wurde der onboardchip eines Nforce4 Chipsatzes nicht erkannt. Dafür der Netgear WG111v2 USB Wlan-Stick. Ob ein Update über Funk ratsam ist sollte jeder für sich entscheiden. '''HINWEIS 2:''' Bevor unter Windows ein Update vorgenommen wird, sollte die Softwarefirewall kurzfristig dafür abgeschalten werden. Dies kann nur nervige Sperrungen hervorrufen, die das Updaten verzögern. '''HINWEIS 3:''' UGUTIL läuft leider nicht unter Vista 64bit <br /> <br /> <br /> ===Variante 2 (Linux)=== Der meine ich etwas einfachere Weg geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="Unslung-6.8-beta.bin"</pre></code> ''(das Beispiel gilt für die im Moment aktuelle 6.8 Firmware) '' Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="Unslung-6.8-beta.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre>linux:/home/test/Work/upslug2 # ./upslug2 --image="Unslung-6.8-beta.bin" LK........... xx:xx:xx:xx:xx:xx Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LK............. xx:xx:xx:xx:xx:xx . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Nachdem die Kiste automatisch neu startet ist die neue Firm wieder drauf. <br /> <br /> <br /> <br /> ==Unslingen und User einrichten== Zuerst wird über das Administrationspanel die neue Firmware eingespielt. Das funktioniert menügesteuert. Danach müssen wir das Gerät "entsichern", damit eine Telnet-Session zugelassen wird und wir in das geheiligte Innere der Maschine gelangen können. '''1.''' Startet die Kiste ohne angeschlossener Festplatte. Ruft jetzt im Browser unter Angabe der IP nebst des eventuell von Euch neu eingestellten voreingestellten Ports folgende URL auf: '''http://192.168.1.77:8080/Management/telnet.cgi''' Hier werdet Ihr nach dem Adminpasswort gefragt. Sollte das nicht verstellt sein, dann lautet es werkseitig admin:admin . Jetzt könnt Ihr bequem auf einen Button klicken, um die Telnetsession zu "enablen" (aktivieren). Vergesst bitte nicht, wenn Ihr mit Euren Arbeiten an der Slug fertig seid, hier wieder auf "disable" zu klicken, damit die Maschine vor Zugriffen gesichert ist. '''''Hinweis:''' Ab de unslug Version 6.8 kann man dies auch komfortabel auf der Startseite des Administrationspanel erledigen!!!'' Schaltet nun von Eurer Shell aus auf eine Telnetsession '''telnet [IP der Slug]''' '''''Hinweis:''' Ein sehr schönes Tool hierzu ist der Putty. Die Projektseite dazu findet Ihr hier: PuTTY: http://www.putty.nl/ Richtet ein Profil für die NSLU2 im Putty ein (in der Konfiguration telnet anklicken, die IP der Slug eintragen und als neues Profil mit einem Namen -z.B. nslu2 - abspeichern) und legt eine Verknüpfung an. Diese erweitert Ihr mit dem Parameter -load [profilname] , also unter Windows mit unserem nslu2 Profil z.B. putty.exe -load nslu2 . Dann genügt ein Doppelklick auf die Verknüpfung und Ihr habt schon eine Telnetverbindung zum gewünschten Client vor Euch auf dem Bildschirm.'' '''''Hinweis''''': Damit später auch die NSLU2 von der Konsole aus auf die Repositories zugreifen kann, muss im Webadmin noch ein Gateway eingetragen werden! Dies ist in der Regel die IP Eures Routers! Ohne diesen erhaltet Ihr beim Installieren von zusätzlichen Paketen eine Fehlermeldung. '''2.''' Telnet auf die Box und hier nun mit root:'''uNSLUng''' anmelden. Wenn Ihr als Root angemeldet seid, erhaltet Ihr in etwa diese Meldung: <code><pre>login: root Password: No directory, logging in with HOME=/ Welcome to Unslung V2.3R63-uNSLUng-6.8-beta -------- NOTE: RUNNING FROM INTERNAL FLASH -------- This system is currently running from the internal flash memory, it has NOT booted up into "unslung" mode from an external drive. In this mode, very few services are running, and available disk space is extremely limited. This mode is normally only used for initial installation, and system maintenance and recovery. BusyBox v0.60.4 (2005.03.22-06:52+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands.</pre></code> Danach die Festplatte wieder anschließen. Wartet nun ab, bis die Box die Festplatte als angeschlossen anzeigt (grünes LED an der Box, oder über das Web-Adminpanel). Jetzt seid Ihr in der Box schonmal drin. Damit nun das Betriebsystem auf die Festplatte ausgelagert wird (unslingen) gebt nun folgenden Befehl an der Konsole ein: '''/sbin/unsling disk2''' Ab der Firmwareversion 6.8 wird die Festplatte hierzu an den USB-Port 2 angeschlossen. Danach kann hier sogar ein root-Passwort eingegeben werden, was dann für das System generell gilt. Wenn das Unslingen fertig ist das Gerät neu starten. Die Platte bleibt am USB-Port2!!! Es dauert eine Weile, bis die Sache erledigt ist. Jetzt kann aufgrund des wesentlich größeren Speicherplatzes später entsprechend neue Software installiert werden. '''3.''' Ruft in Euerem Browser das Administrationspanel auf und legt einen neuen User an (z.B. testi). Dieser soll auch ruhig ein Heimatverzeichnis bekommen, also hier das im Konfigmenü auswählen. Speichern und beenden. Das neue Heimatverzeichnis liegt dann im Wurzelverzeichnis und trägt den Namendes Users, also in unserem Beispiel "/testi" '''4.''' In der Telnetkonsole dann '''vi /etc/passwd''' eingeben. Mit "i" in den Editmodus wechseln. '''5.''' Sucht nun die Zeile mit <code><pre>Testi:xyzverschlüsseltes.passwort:2002:501:::/dev/null</pre></code> Damit nun später die bash verwendet werden kann und auf das Verzeichnis auch via ftp ein Zugriff erfolgen kann, werden wir die Zeile hinten abändern. Dazu legen wir nochmal das Heimatverzeichnis des Users fest: <code><pre>testi:xyzverschlüsseltes.passwort:2002:501::/testi:/bin/sh</pre></code> '''6.''' Mit "'''ESC'''" den Editmodus verlassen. mit ":w" speichern und ":q" beenden. '''7.''' Zum Schluß updaten wir die Slug gleich und sehen dabei, ob unser neuer User wirklich Rootrechte hat. Hierzu folgendes ausführen: '''ipkg update'''<br /> '''ipkg upgrade''' Danach werden automatisch die neuesten Pakete gezogen und installiert. Zudem sollten noch folgende Einstellungen im Webadmin gemacht werden: Ruft dazu Eure Konfiguration auf und geht auf '''Administration - > System'''. Dann entfernt die Haken vor -> Enable Guest Logins<br /> -> Enable FTP-Server<br /> -> Enable UPnP Support '''Wichtig''' ist, dass Ihr noch den Port des Webadmins von 80 auf einen anderen ändert (8282 oder ähnliches). Den Port 80 benötigt Ihr dann für Euren Apache. Die Konfig sollte dann in etwa wie folgt aussehen: [[Bild:slug03.jpg|center]] '''''Hinweis:''' Ihr müsst nicht jedes mal den Webadmin bemühen, um die Slug neu zu starten. Ebenso ist es nicht notwendig, jedes Mal aufzustehen, und das Knöpfchen direkt am Gerät zu drücken. Wenn Ihr eh schon in der Konsole eingeloggt seid, dann geht das über zwei lockere Befehle am Prompt:'' '''sync'''<br /> '''reboot''' <br /> <br /> <br /> ==bash installieren== Ziel ist es, die bash soweit zu installieren, dass jeder User entsprechend die gleiche bash verwendet. Ich beziehe mich dabei auf die Anleitung von unslung.de, passe diese allerdings hie und da einwenig an, um vielleicht das eine oder andere einwenig chronologischer in der Beschreibung darzustellen. '''1)''' Alles passiert natürlich unter telnet. Loggt Euch mit Euerem root-Account ein, und installiert zuerst die bash: '''ipkg install bash''' '''2)''' Falls noch nicht geschehen legen wir unter '''etc''' eine Datei '''profile''' an und editieren diese gleich: '''vi /etc/profile''' ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' '''3)''' Nun fügen wir folgende zwei Zeilen in die Datei ein: '''export PS1="\[\033[1;33m\]\u@\h\[\033[0;37m\]:/> "'''<br/> und GANZ ZUM SCHLUSS '''test -f /opt/bin/bash && exec /opt/bin/bash''' Wer's etwas freundlicher beim Begrüßen mag, der kann oben in der '''etc/profile''' noch folgende Zeilen ergänzen: <code><pre>echo --------------------------------------------------------------------- echo "Hallo $USER, willkommen auf der Slug! ;-)" echo --------------------------------------------------------------------- echo </pre></code> '''4)''' Als nächstes legen wir im root-Verzeichnis die '''.bashrc''' an: '''vi /.bashrc''' In diese Datei können wir einige hilfreiche aliase und Umgebungsvariablen setzen. Ich empfehle folgende Zeilen einzugeben: <code><pre>alias "d=ls -la" alias "dir=ls -la" export PATH=$PATH:~/bin:. </pre></code> '''5)''' Die '''.bashrc''' muss nun in jedes Userverzeichnis kopiert werden, das sich im Rootverzeichnis befindet. <br /> <br /> <br /> ==Midnight Commander installieren== '''1)''' Zuerst muss das Programm installiert werden: '''ipkg install mc''' (falls vorher noch nicht geschehen, dann zuerst '''ipkg update''' eingeben!) '''2)''' Falls noch nicht geschehen, die Datei '''/etc/profile''' anlegen und editieren: '''vi /etc/profile''' '''3)''' Dort zwei Zeilen ergänzen: <code><pre>export TERMINFO=/opt/lib/terminfo export TERM=xterm-pcolor</pre></code> '''4)''' System neu starten. '''5)''' Midnight Commander mit '''/opt/bin/mc''' starten. Falls Ihr die bash installiert habt, könnt Ihr auch in der '''.bashrc''' folgendes ergänzen: '''alias "mc=/opt/bin/mc"''' Das macht die Sache recht praktisch, denn so wird das Programm ganz einfach mit einem '''mc''' in der shell gestartet. <br /> <br /> <br /> <br /> ==FTP-Server einrichten (vsftpd)== '''1)''' Zuerst legt man ein leeres Verzeichnis an:<br /> '''mkdir -p /usr/share/empty''' '''2)''' Vsftp-Daemon installieren:<br /> '''ipkg install vsftpd''' '''3)''' rc.xinetd Datei anlegen und mit Inhalt füllen:<br /> '''vi /unslung/rc.xinetd''' Dann im vi-Editor den Editmodus mit Drücken der Taste "i" aktivieren und folgendes abtippen: <code><pre>#!/bin/sh if ( [ ! -f /etc/inetd.conf ] || !(grep vsftpd /etc/inetd.conf -q) ) then echo "ftp stream tcp nowait root /opt/sbin/vsftpd /opt/etc/vsftpd.conf" >>/etc/inetd.conf fi return 1</pre></code> Bitte HAARKLEIN GENAU abschreiben! Bitte zweimal kontrollieren! Dann Edit-Modus mit "ESC" beenden und mit<br /> ''':w'''<br /> abspeichern und mit<br /> ''':q'''<br /> beenden '''4)''' vsftpd.conf editieren, damit jeder angemeldete User nur seinen eigenen Bereich sehen kann, und nicht in Toplevel wechseln kann: '''vi /opt/etc/vsftpd.conf''' Hier dann im Edit-Modus (Taste "i" !) folgende Zeile am Schluss ergänzen: '''chroot_local_user=YES''' Abspeichern und beenden! '''5)''' Logdatei für den ftp-Daemon erstellen:<br /> '''mkdir -p /opt/var'''<br /> '''mkdir -p /opt/var/log'''<br /> '''touch /opt/var/log/vsftpd.log''' '''6)''' Ersten User anlegen: Im normalen Adminpanel einen neuen User anlegen. Nennen wir ihn hier als Beispiel "upload". Dieser bekommt auch beim Erstellen ein Homedirectory auf der Platte zugesprochen. Jetzt müssen wir noch die passwd anpassen: '''vi /etc/passwd''' Den User "upload" suchen. Die Zeile sieht dann in etwa so aus: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501:::/dev/null</pre></code> Das ändern wir dann in folgender Weise ab: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501::/upload:/bin/sh</pre></code> Da auf der Slug nun alles auf dem USB-Port2 liegt, wäre das korrekte Verzeichnis '''/share/flash''' ... Wir umgehen das damit, indem wir den die Verlinkung unter '''/root''' verwenden. Somit wird dem User ein festes Heimatverzeichnis zugewiesen, das sich eben auf der Platte befindet. Das alles wie oben schon beschrieben dann speichern und beenden. '''7 )''' Die NSLU dann neu starten und mit einem ftp-Clienten oder via Webbrowser <code><pre>ftp://username:deinpasswort@ipnummerdernslu ausprobieren.</pre></code> Noch ein Tipp: Wenn man ein laufendes Protokoll sich anzeigen lassen möchte, dann macht eine Telnet-Session auf und gebt folgendes ein: '''tail -f /opt/var/log/vsftpd.log''' Dann habt Ihr immer im Blick, was gerade auf dem Server passiert. '''Hinweis 1:''' Solltet Ihr einen Tippfehler bei der Erstellung der /share/hdd/conf/unslung/rc.xinetd gebaut haben und startet das Dingens via Neustart der Kiste oder mit dem Befehl /etc/rc.d/rc.xinetd, dann kann es sein, dass Ihr eben keinen Zugriff via ftp bekommt. Ihr entdeckt dann zwar den Fehler im /share/hdd/conf/unslung/rc.xinetd aber auch nach Korrektur startet der FTP-Server nicht. Das liegt nun daran, dass beim ersten Start die Zeile echo"ftp... " in das /etc/rc.d/rc.xinetd Script MIT ÜBERNOMMEN wurde. Also hier dann den Fehler, sollte er in der echo-Zeile entstanden sein, auch ausbessern! Dann klappt es! Die Festplatte zu löschen und neu zu unslingen bringt auch nichts, da das etc/rc.d/rc.xinetd auf dem Flashspeicher liegt. Hier müsste man die Firm dann komplett neu aufspielen. Aber da lässt sich sicher besagte Datei einfacher und schneller editieren. <br /> <br /> <br /> ==Der Apache Webserver== Der Apache Webserver ist auf der Slug schnell installiert. Hierzu wird sich erstmal als root per telnet eingeloggt. Danach führen wir den Befehl '''ipkg install apache''' aus. Das System wird automatisch konfiguriert und der Webserver gestartet. Dieser liegt allerdings auf dem Port 8000. Ruft den Server nun mit '''[eure ip adresse]:8000''' auf. Es ergibt dann folgendes Bild: [[Bild:slug04.jpg|center]] Um den Apache nun anzupassen rufen wir die Konfigurationsdatei des Apache auf: '''vi /opt/etc/apache2/httpd.conf''' Wichtige Zeile/ Einträge: '''Listen 8000''' gibt den Standardport an. Ändert dies auf '''80''', um den normalen Port eines Webservers zu verwenden. '''DocumentRoot "/opt/share/www"''' legt fest, wo Eure Webfiles liegen. Idealerweise legt hier einen User an, den Ihr per ftp erreichen könnt. Auf dieses Userverzeichnis schreibt diese Zeile um. Z.b. nennt sich der User webserver . Also lautet die Zeile dann: '''DocumentRoot "/webserver"''' '''<Directory "/opt/share/www">''' muss ebenso angepasst werden (z.B. '''<Directory "/webserver">''' ) '''DirectoryIndex index.html index.html.var''' Diese Zeile ergänzt dann noch durch ein "'''index.htm''' und '''index.php'''" , damit auch Pages mit der htm und php Extention geladen werden können. Das sollten die wichtigsten Punkte sein. Im Internet finden sich noch eine Vielzahl an weiteren Konfigurationsmöglichkeiten für den Apache. Speichert Euere Änderungen ab. Kopiert nun eine Testpage auf Euer Webverzeichnis und startet die Slug neu. Nun müsste nach einer kurzen Wartezeit der Webserver mit Eurer normalen IP abrufbar sein. '''''Hinweis:''' Bei Eurem Webserver bitte die Files immer via ftp und nicht dem Samba-Share hochladen. Denn nur über einem ftp-Upload ist sichergestellt, dass Ihr keinen Access-Error wegen mangelnder Zugriffsrechte bekommt.'' <br /> <br /> <br /> ==PHP Erweiterung für Apache== Zuerst loggen wir uns wieder als root via einer Telnetsession ein. Danach installieren wir zwei Pakete: '''ipkg install php-apache eaccelerator''' Jetzt starten wir den Apache neu, indem wir folgenden Befehl absetzen: '''/opt/etc/init.d/S80apache''' Jetzt legen wir folgenden Code auf unsere Homepage: <code><pre><?php phpinfo() ?></pre></code> Das File speichern wir als "'''phpinfo.php'''" ab. Dieses rufen wir dann über unseren Browser auf: '''[deine ip nummer]/phpinfo.php''' Wenn alles funktioniert sollte dies in der Art zu sehen sein: [[Bild:slug05.jpg|center]] Dieses Script gibt nun Auskunft, welche Version des Apache und des PHP installiert ist. Hinweis! Sollte der php-Aufruf nur einen Plain-Text bringen, dann kann es sein das in einer möglichen neuern Apache Version der php-Aufruf in der '''/opt/etc/apache2/httpd.conf''' fehlt. Ergänzt hierfür am Ende der Datei folgende Zeilen: <code><pre>LoadModule php5_module libexec/libphp5.so AddType application/x-httpd-php .php .phtml</pre></code> <br /> <br /> <br /> ==Mysql Datenbank installieren== Mysql selbst installieren wir über ein Konsolenfenster als root. Hierzu gebt folgenden Installationsbefehl ein: '''ipkg install php-mysql''' Nachdem die Pakete installiert sind setzen wir sofort ein root- Passwort für die Datenbank: '''/opt/bin/mysqladmin -u root password dein_passwort''' Jetzt legen wir eine neue Datenbank mit den Namen Beispiel an: '''/opt/bin/mysqladmin -p create beispiel''' ''Hier muss nun Euer Passwort eingegeben werden '' Das wären die ersten wirklichen Fingerübungen am Prompt, was die Datenbank betrifft. Damit der Webserver die Datenbank auch sauber integriert startet die Slug einfach neu: '''sync'''<br /> '''reboot''' Ruft nun nochmal Euer phpinfo-Script auf, wie ich es im PHP-Abschnitt beschrieben habe. Im Bereich "'''addidional .ini files parsed'''" muss jetzt die '''mysql.ini''' stehen: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:slug06.jpg|NSLU2]]</div> Wer jetzt natürlich nicht unbedingt sich die Finger beim Eingeben von cryptischen Befehlszeilen am Prompt brechen möchte, wenn er seine Datenbank administriert, der braucht auch nicht auf seiner kleinen Slug auf die Vorzüge der grafischen Administration via phpmyadmin zu verzichten. Das Programmpaket kann man sich unter http://www.phpmyadmin.net herunterladen. Das entpackt man dann auf seinen Webserver und legt wie gehabt seine '''config.inc.php''' an. Bitte konsultiert die beiliegende Doku, um den genauen Installationsvorgang in Erfahrung zu bringen. Weiteres würde über den mir gesteckten Rahmen dieser Dokumentation hinaus gehen. Wenn Ihr die Dateien oben habt und die Zugriffe in der config geregelt habt, dann solltet Ihr das phpmyadmin wie gewohnt benutzen können: <br /> [[Bild:slug07.jpg|center]] '''''Hinweis:''' Hier ist es ratsam, über ein htaccess File das Verzeichnis zu schützen, auf dem das phpmyadmin abgelegt ist. Sonst kann ja jeder in der Datenbank herumpfuschen.'' ===Exkurs: htacces anlegen=== Das ist einwenig kniffeliger, aber ich denke, dass man das, wenn man sich Schritt für Schritt an meine Anleitung hält machbar. Zuerst müssen wir dem Apache erklären, dass er nicht nur Friedenspfeifen rauchen soll, sondern auch gesicherte Verzeichnisse zu verwalten hat. Dazu müssen wir seine Konfigurationsdatei "nachbehandeln". In einer telnet-Session rufen rufen wir diese als root im vi-Editor auf: '''vi /opt/etc/apache2/httpd.conf''' Die Zeile '''AllowOverride None''' muss auf '''AllowOverride All'''<br /> ''( i oder Einfg. zum Editieren drücken, ESC zum Verlassen des Editmodus)'' gesetzt werden. Dann mit :w speichern und mit :q verlassen. Jetzt startet den Apache wieder neu, damit die neue config eingelesen wird: '''/opt/etc/init.d/S80apache''' Somit sind wir entsprechend vorbereitet, die gewünschten Verzeichnisse zu sichern. Wir wollen nun das Verzeichnis des Webservers /phpmyadmin absichern. Dieses liegt auf der Slug Beispielsweise unter /webserver/phpmyadmin . Legt nun eine Datei .htaccess mittels vi an '''vi /webserver/phpmyadmin/.htaccess''' und füllt diese mit folgenden Zeilen: <code><pre>AuthType Basic AuthName Phpmyadmin AuthUserFile /webserver/phpmyadmin/.htpasswd require valid-user</pre></code> Hinter "'''AuthName'''" könnt Ihr eine beliebige Bezeichnung setzen. Diese wird dann nur eben später am Eingabefenster des Browsers angezeigt, wenn nach dem Passwort gefragt wird. Man kann natürlich noch einige Erweiterungen in die '''htaccess''' mit aufnehmen. Hierzu bietet sich ein sehr schönes Onlinekonfigurationsprogramm an, das Ihr unter folgender URL [http://www.harbeck-is.de/tools/htaccess_gen/htaccess_loader.php] abrufen könnt. Allerdings sollte unsere Konfig für das Erste genügen. Dann legen wir die Passwortdatei '''.htpasswd''' an. Dazu liefert uns der Apache ein Tool, das uns auch die Passwörter entsprechend verschlüsselt. <code><pre>htpasswd -C .htpasswd username</pre></code> Gebt nun das Passwort ein. Einen weiteren User legt Ihr mit <code><pre>htpasswd .htpasswd neueruser</pre></code> an. Macht auch diese Datei lesbar: <code><pre>chmod 644 .htpasswd</pre></code> Sollte der Aufruf '''htpasswd''' nicht funktionieren, so habt Ihr in der '''etc/profile''' den entsprechenden Suchpfad nicht eingetragen. Ihr könnt Euch auch kurzfristig damit behelfen: <code><pre> export PATH=$PATH:/opt/sbin:.</pre></code> Ansonsten solltet Ihr eh folgende Zeilen in die '''/etc/profiles''' aufnehmen: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Es funktionieren dann auch komplexere Anwendungen, wie z.B. das bekannte phpbb-Forum ( Download hier: http://www.phpbb.com/ ) Hinweise zur Installation entnehmt bitte der beiliegenden Dokumentation.<br /> Testinstallation: [[Bild:slug08.jpg|center]] <br /> <br /> ==Zeitgesteuerte Events - Die Crontab== Ihr könnt natürlich wie unter jedem Linux-System zweitgesteuerte Events, wie z.B. Sicherungen über die Crontab steuern. Im Internet findet Ihr eine Vielzahl an Seiten, die den genauen Aufbau der Crontab beschreiben. Da wir einen Webserver haben und mit einer Datenbank arbeiten, macht es Sinn, die Datenbank regelmäßig auf ein extra Verzeichnis zu speichern. Wir gehen in unserem Beispiel davon aus, dass wir die Datenbank "beispiel" alle 30 Minuten speichern wollen. Zuerst legen wir ein Script an, das unsere Datenabank wegsichert. Idealerweise habt Ihr einen weiteren user (z.B. test) angelegt, auf den Ihr ftp-Zugriff habt. In dessen Verzeichnis werden wir die Datenbank "dumpen". Die Datei legen wir wieder mit dem guten alten vi an: '''vi /usr/sbin/sqldump.sh''' Der Code sieht im Groben wie folgt aus: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) datenbankname > /zielverzeichnis/datenbankname.sql --default-character-set=utf8</pre></code> (bitte die /opt/bin ... in eine Zeile schreiben) In unserem Beispiel also: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) beispiel > /test/beispiel.sql --default-character-set=utf8</pre></code> Als Passwort (dann ohne die Klammern!!!) gebt Ihr Euer admin-Passwort ein, das Ihr bei der mysql-Installation festgelegt habt. Speichert die Datei ab. Jetzt müssen wir die Datei noch ausführbar machen. Das funktioniert über ein lockeres '''chmod +x /usr/sbin/sqldump.sh''' Testet das Script einfach, indem Ihr das Datenbank-Dumping per Hand startet: '''/usr/sbin/sqldump.sh''' Nun editieren wir die Crontab. Das machen wir alte Linux-Hasen wieder über den vi: '''vi /etc/crontab''' fügt ans Ende der Datei folgende Zeile ein: '''*/30 * * * * root /usr/sbin/sqldump.sh &>/dev/null''' Die Crontab sollte nun ungefähr so aussehen: <code><pre>SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ # ---------- ---------- Default is Empty ---------- ---------- # 0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null 0 0 * * * root /usr/sbin/WatchDog &>/dev/null 1 * * * * root /usr/sbin/hwclock -s &>/dev/null */30 * * * * root /usr/sbin/sqldump.sh &>/dev/null</pre></code> Speichert Euere Änderungen ab. Danach startet die Slug neu, damit die Crontab auch wieder neu eingelesen wird: '''sync'''<br /> '''reboot''' Prüft dann bei Gelegenheit nach, ob Ihr tatsächlich immer neue Sicherungen in Euer Sicherungsverzeichnis "gedumpt" bekommt. <br /> <br /> <br /> ==Prozessverwaltung mit htop== Unter Linux kennen wir alle das fast schon überlebensnotwendige '''top''' , das uns aktuelle Prozesse anzeigt und uns ermöglicht, auch einen unerwünschten Prozess zu "'''killen'''", wie es in der Linuxwelt so lautmalerisch tatsächlich heißt. Für die Slug gibt es ein ähnliches Programm, das sogar einwenig komfortabler gestaltet ist: '''htop'''. Installiert htop einfach mit einem <code><pre>ipkg install htop</pre></code> Legt dann noch eine Verknüpfung zu diesem Tool an: <code><pre>ln -s /opt/bin/htop /bin/htop</pre></code> Danach könnt Ihr das Programm ganz bequem mit <code><pre>htop</pre></code> starten. Ihr solltet dann folgendes Bild zu sehen bekommen: [[Bild:slug09.png|center]] Interessant hierbei ist noch die Darstellung der CPU Auslastung und der Speicherbelegung. Man sieht damit alles sehr schön auf einen Blick. <br /> <br /> <br /> ==Die Secure-Shell== Wer nicht ständig über das doch ungeschützte telnet auf seine Box zugreifen möchte, kann dies auch über die Secure-Shell (ssh) erledigen. Dazu installiert diese einfach mit einem <code><pre>ipkg install openssh</pre></code> Der Vorteil hierbei ist, dass nicht jedes Mal der Telnet aktiviert werden muss und die Angelegenheit entsprechend verschlüsselt über den Äther geht. <br /> <br /> <br /> ==Mehrere Konsolen mit Screen== Das kleine Programm Gnu Screen [http://www.gnu.org/software/screen/] ermöglicht den User auf einer Konsole mehrere Screens, also Konsolen zu aktivieren, zwischen denen man bequem umschalten kann. So kann beispielsweise eine Log-Datei mit tail oder der htop mitlaufen, während man am nächsten Screen weitere Arbeiten tätigt. Installiert wird Screen einfach durch ein <code><pre>ipkg install screen</pre></code> Das Programm wird dann an der Konsole mit einem <code><pre>/opt/bin/screen</pre></code> gestartet. Soltet Ihr '''/opt bin''' bereits als Suchpfad integriert haben, dann genügt ein <code><pre>screen</pre></code> Damit auch im "Screen" die bash verwendet wird, legt in Eurem Home-Verzeichnis des Users, der eben screen starten darf eine Konfigurationsdatei an: <code><pre>vi .screenrc</pre></code> Dort ergänzt Ihr die folgende Zeile: '''shell bash''' Speichert diese und startet screen neu. Wenn Ihr den Willkommensscreen abstellen wollt, dann schreibt folgende Zeile in die .screenrc: '''startup_message off''' Folgende Befehle solltet Ihr Euch merken: '''Strg+a c''' Startet eine neue Konsole<br /> '''Strg+a''' leer schaltet zwischen den Konsolen um<br /> '''exit''' beendet die Konsole (wenn eine Konsole übrig wird screen beendet)<br /> '''Strg+a d''' beendet screen, screen läuft aber im Hintergrund weiter<br /> '''screen -R''' startet wieder die im Hintergrund noch laufende Screen-Session<br /> Der wesentliche Vorteil von screen ist, dass alle Programme, die Ihr innerhalb der Screen-Session startet, auch dann weiter laufen, wenn Ihr Euch aus der Slug ausloggt. Somit könnt Ihr beispielsweise einen großen Download mittels curl starten, müsst aber nicht den nohup Befehl verwenden, sondern könnt jeder Zeit wieder Euch einloggen und mittels '''screen -R''' die Session aufnehmen und beispielsweise den statistischen Output von curl Euch ansehen. <br /> <br /> <br /> ==Datum und Uhrzeit einstellen== Dies könnt Ihr als root an der Konsole erledigen. Gebt dazu folgendes ein: <code><pre>date MONAT|TAG|STUNDE|MINUTE|JAHR</pre></code> Also wenn es der 4.12.2007 23:24 sein soll, dann muss der Befehl so aussehen: <code><pre>date 120423242007</pre></code> Über den Webadmin könnt Ihr dann zusätzlich noch die Uhrzeit für das Webpanel einstellen. <br /> <br /> <br /> 380db8c68bca4f8c13b8a4f1071f217e52e0e8ea Slugdebug 0 18 334 25 2010-09-01T13:26:45Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Fehler beim eaccelerator== '''Wichtig:''' Schaut bitte einmal Eure Apache Error-Log Datei an: '''/opt/var/apache2/log/error_log''' Es kann sein, dass die mittlerweile sehr groß geworden ist und förmlich von eaccelerator Meldungen ( could not lock ) ist. Der eaccereator cacht im php-Bereich und sorgt für etwas mehr Performance beim Laden. Solltet Ihr die error_log vol von eaccelerator Meldungen haben (die kommen im Sekundentakt wenn eine php Seite geladen wird), dann müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Dann brauchen wir noch die dev- Files der php Installation: <code><pre>ipkg install php-dev</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Nun entfernen wir den Beschleuniger: <code><pre>ipkg remove eaccelerator</pre></code> Und starten den Indianer neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun holen wir uns den Quellcode des aktuellen eaccelrator: <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> (auf der Projektseite [http://bart.eaccelerator.net] des eaccelerator könnt Ihr Euch über die aktuelle Versionsnummer informieren) Das Paket entpacken wir locker aus der Hüfte: <code><pre>tar vxf eaccelerator-0.9.5.3.tar.bz2</pre></code> Ab in das Buildverzeichnis: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Nun keine Zeit verschwenden und sofort <code><pre>phpize</pre></code> eingeben. Danach konfigurieren wir den php Beschleuniger mit folgendem einfachen Befehl: <code><pre>./configure --prefix=/opt --with-eaccelerator-userid=nobody</pre></code> Das kann einwenig dauern. Wenn alles fehlerfrei durch ist, kann das Programm gebacken werden: <code><pre>make</pre></code> Danach der obligatorische install: <code><pre>make install</pre></code> Da wir die Scriptfiles nicht manuell anlegen wollen tun wir jetzt das, was keiner erwartet: Wir installieren das Paket nochmal aus dem repository: <code><pre>ipkg install eaccelerator</pre></code> Das legt uns alle benötigten Pakete an Aber wir löschen wieder das File, damit wir unser eigenes verwenden können: <code><pre>rm /opt/lib/php/extensions/eaccelerator.so</pre></code> Und sofort unsere neue Datei rein: <code><pre>cp /work/eaccelerator-0.9.5.3/modules/eaccelerator.so /opt/lib/php/extensions/eaccelerator.so</pre></code> Alte Apache Logdatei tillen: <code><pre>rm /opt/var/apache2/log/error_log</pre></code> Frische Apache Logdatei erzeugen: <code><pre>touch /opt/var/apache2/log/error_log</pre></code> Jetzt startet den Apache nochmal neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Und schaut Euch die Error-Log an: '''tail -f /opt/var/apache2/log/error_log''' Nun ruft Eure Internetseite auf. Sollte natürlich php-Code sein. Die Fehlermeldungen sollten nun nichtmehr auftauchen. Zudem schaut Euch mal Eure phpinfo.php Datei an, ob der eaccelerator tatsächlich cached. Das seht Ihr in der Sektion EACCELERATOR [[Bild:slug10.jpg|center]] Bei dem fehlerhaften eaccelerator sind bei den Memory und cached File Bereich die "0" drin. Wenn es läuft, dann stehen hier entsprechende Werte. <br /> <br /> <br /> ==Fehler bei Midnight Commander== Wer bei einer neuen Installation den Fehler beim Start des MC bekommen sollte, dass ein libext2fs.so nicht gefunden werden kann, der muss das Paket e2fsprogs nachinstallieren: <code><pre>ipkg install e2fsprogs</pre></code> Sollte allerdings mittlerweile nicht mehr auftreten <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -l -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Wenn der Befehl hängen bleibt und Ihr nicht wieder zurück zur Eingabeaufforderung kommt, dann beendet dies mit '''STRG+C''' . Dieser Effekt kann durchaus mit der neueren 6.10er Firmware auftauchen. In diesem Fall lasst die '''-l''' Option weg: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -l -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Bei obigen Fehler auch hier ohne der '''-l''' Option: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==vsftpd Fehler in Version 2.1.0== Mit der Version 2.1.0 kommt es leider zu folgenden Fehler beim Verbinden: '''500 OOPS: could not bind listening IPv4 socket''' Vermutlich wurden beim Codieren einige default Einstellungen nicht einkompiliert. Um die Geschichte nun wieder zu reparieren editiert die '''vsftpd.conf''': <code><pre>vi /opt/etc/vsftpd.conf</pre></code> Fügt folgende Zeilen bitte ein: '''listen=NO'''<br /> '''anonymous_enable=NO'''<br /> '''local_enable=YES'''<br /> '''write_enable=YES''' <br /> Speichert die Änderung ab und beendet den '''inetd''': <code><pre>killall inetd</pre></code> Jetzt startet den '''inetd''' neu: <code><pre>/etc/rc.d/rc.xinetd</pre></code> Jetzt sollte der Connect zu Eurem ftp wieder funktionieren. b77a53706454e914e15db85f202ffc528e6dd7ab Firewalling 0 35 335 44 2010-09-01T13:27:53Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Firewall mit Fail2ban== Wer im Netz einen Webserver betreibt, der wird sich immer wieder Attacken gegen seinen Server ausgesetzt fühlen. Das sind nicht oft gezielte Angriffe, sondern eher Suchmachanismen, die an diversen Standardports herausfinden, ob diverse Dienste wie http oder ssh freigegeben sind. An solchen freigegeben Ports werden dann entsprechende Einbruchsversuche gestartet. Dies geschieht über verschiedene Wege. Die einfachste aber am häufigsten verwendete Methode ist der sogenannte Brute Force Angriff. Hier versucht der Angreifer mittels vorgefertigter Passwortlisten das korrekte Passwort zu erraten. Dabei werden anhand dieser Liste Logins solange probiert, bis das passende Passwort gefunden ist. Ähnliches kann natürlich auch am FTP Server passieren. Dieses Tutorial soll nun eine Möglichkeit aufzeichnen, solchen Brut Force Attacken zu begegnen und zusätzlich die NSLU2 über ein Firewall-Script soweit abzudichten, bis eben auf die für die NSLU2 benötigten Ports. Das Tutorial soll allerdings keinesfalls eine falsche Sicherheit vorgaukeln. Eine Firewall und eine IP Falle, wie wir sie im nachfolgenden Text über das Programm Fail2Ban realisieren werden kann nur eine gewisse Sicherheit bieten. Wichtig ist zudem weiterhin, seine Log-Dateien regelmäßig im Auge zu behalten und auch zu kontrollieren, welche Dateien sich auf der Büchse befinden. Bekommen die Dateien ungebetenen Zuwachs, dann ist wohl der ftp-Server geknackt worden. Das von mir verfasste Tutorial fasst einige Arbeitsschritte zusammen, die für sich betrachtet auch noch ausbaufähig sind. Aufgrund der Komplexität des Themas kann dies auch nicht wirklich vollständig sein und stellt in dieser Hinsicht eine Art Grundgerüst dar, auf dass freilich weiter aufgebaut werden kann. Da das Konfigurieren einer Firewall nicht wirklich trivial ist sei noch gesagt: Bevor Ihr irgendwelche Scripte automatisiert, startet diese IMMER erst manuell und testet die Funktionalität der Scripte. Sperrt Ihr Euch aus Versehen durch eine Falschkonfiguration aus und die Scripte werden nach einem Reboot automatisch gestartet, weil diese bereits in den Initscripten integriert wurden habt Ihr wenig bis gar keine Chance mehr, auf Eure Büchse zu kommen. Hier muss das Gerät dann wieder mit einer frischen Firmware geflasht werden und Ihr könnt das Gerät wieder von vorne neu einrichten. Ziel dieses Tutorials ist es nun, eine IP Falle mit dem Programm Fail2Ban [http://www.fail2ban.org/wiki/index.php/Main_Page] zu installieren. Mittels dieser "Falle" können Loginversuche limitiert werden. IP-Nummern über die nun versucht wird, ein Passwort zu erraten, werden nach einer vordefinierten Anzahl von Fehlversuchen einfach gesperrt. Die Sperre wird dann nach einer gewissen Zeit wieder aufgehoben. Hierbei empfiehlt sich eine Sperre von mehreren Tagen, damit der Versuch, einen Einbruch über eine Passwortliste zu unternehmen ad Absurdum führt. Zudem sollen Einbruchsversuche uns per E-Mail gemeldet werden. Zum Schluss wollen wir noch eine Firewall für die restlichen Ports unseres Servers einrichten. Also lest alles in Ruhe durch, nehmt Euch Zeit für Euer Projekt, dann werdet Ihr denke ich auch eine Menge Spaß dabei haben! <br /> <br /> <br /> ==Basis Pakete installieren== Zuerst sollten wir - falls nicht schon aufgrund meiner vorangegangenen Tutorials geschehen - die NSLU2 durch die Entwicklerpakete ergänzen, damit wir bei Bedarf etwas kompilieren können: <code><pre>ipkg install optware-devel ipkg install python python24</pre></code> Danach modifizieren wir die /etc/profile, damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. <br /> <br /> <br /> ==Syslog ändern== Damit wir ein paar mehr wichtige Informationen wie eben auch die Sicherheitsmeldungen des openssh Servers geliefert bekommen, müssen wir den bisherigen Syslog Dämonen durch einen anderen ersetzen. Dies ist schnell erledigt! Zuerst das neue Syslogpaket installieren <code><pre>ipkg install syslog-ng</pre></code> Danach in '''/etc/inittab''' folgende Zeilen auskommentieren: <code><pre># slog:unknown:/sbin/syslogd -n # klog:unknown:/sbin/klogd -n</pre></code> Alte Logdaemons abschießen: <code><pre>killall syslogd killall klogdSyslog</pre></code> dann mit <code><pre>/opt/etc/init.d/S01syslog-ng</pre></code> starten. Beim nächsten Reboot wird das Programm automatisch gestartet. Damit die Logdateien nicht auf Dauer zu groß werden und eventuell gerade bei der Verwendung von etwas knapp bemessenen USB-Sticks zu vollen Datenspeichern zu führen, empfehle ich die Verwendung des logrotate. Dieser sorgt dafür, dass die schnell wachsenden System-Logs in separaten gepackten Dateien gespeichert werden und die aktuelle Log-Datei heruntergekürzt werden. Dies geschieht rotierend, d.h. die gepackten Dateien werden durchnummeriert und die älteste jeweils gelöscht. Hierzu installiert bitte den logrotate mit folgendem Befehl: <code><pre>ipkg install logrotate</pre></code> Jetzt editiert die '''/opt/etc/logrotate.conf''' mit dem <code><pre>vi /opt/etc/logrotate.conf</pre></code> und ändert diese wie folgt ab: <code><pre>compress /opt/var/log/messages opt/var/log/syslog opt/var/log/kern.log opt/var/log/debug { rotate 5 postrotate /bin/killall syslogd /bin/killall klogd /bin/killall -HUP syslog-ng endscript } include /opt/etc/logrotate.d</pre></code> rotate 5 bedeutet, dass Ihr 5 Sicherungen bekommt, bis die älteste bei der 6. Sicherung gelöscht wird. Damit das auch automatisiert funktioniert, editiert Eure crontab: <code><pre>vi /etc/crontab</pre></code> und fügt folgende Zeile ein: <code><pre>30 23 * * 6 root /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null</pre></code> Das löst jeden Samstag um 23:30 Uhr eine Bereinigung der Logfiles aus. Somit habt Ihr die Files zumindest 5 Wochen zur Verfügung, solltet Ihr irgendwelchen Unregelmäßigkeiten auf die Spur kommen wollen. Die gepackten Dateien befinden sich dann unter '''/opt/var/log''' und können mit dem Midnight Commander beispielsweise eingesehen werden. <br /> <br /> <br /> ==Iptables / Firewall installieren== Bevor wir uns nun an das Eingemachte machen können, müssen wir noch diverse Kernelmodule nachinstallieren. Dann kommen die iptables dran, mit denen wir im weiteren Verlauf des Tutorials noch viel Freude haben werden. Folgende 4 Pakete werden nun installiert: <code><pre>ipkg install kernel-module-ip-tables -force-depends ipkg install kernel-module-iptable-filter -force-depends ipkg install kernel-module-ipt-log ipkg install iptables</pre></code> Startet nun sicherheitshalber Eure Slug neu, damit alles sauber initialisiert wird. <br /> <br /> <br /> ==Erweiterung der Firewall mit IPTABLES== Wer seine Slug noch weiter abdichten möchte, der kann hier mit einem sehr guten Script arbeiten, dass man auf der NSLU2-Linux.org findet. Dieses fügt weitere Regeln hinzu und sperrt die Ports. Wobei Standarddienste wie der ftp und der http Server offen bleiben. Sollen weitere Ports geöffnet werden, so muss das in dem folgenden Script hinterlegt werden. Jetzt ein Firewallscript anlegen: <code><pre>touch /opt/etc/iptables.sh</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /opt/etc/iptables.sh</pre></code> Dann füllen wir den Inhalt mit folgender ausgezeichneten Firewallregel, welches ich auf der nslu2-linux.org gefunden habe (Link folgt nach dem Script): <code><pre>#!/bin/sh ############################################################################### # # Local Settings # # IPTables Location - adjust if needed IPT="/opt/sbin/iptables" IPTS="/opt/sbin/iptables-save" IPTR="/opt/sbin/iptables-restore" # Internet Interface INET_IFACE="ixp0" # Path to iptables modules IPT_MODPATH="/lib/modules/2.4.22-xfs/kernel/net/ipv4/netfilter" # CHANGE THIS TO MATCH YOUR SLUG IP ADDRESS # currently not used INET_ADDRESS="10.0.0.123" # Localhost Interface LO_IFACE="lo" LO_IP="127.0.0.1" # Save and Restore arguments handled here if [ "$1" = "save" ] then echo -n "Saving firewall to /etc/sysconfig/iptables ... " $IPTS > /opt/etc/iptables echo "done" exit 0 elif [ "$1" = "restore" ] then echo -n "Restoring firewall from /etc/sysconfig/iptables ... " $IPTR < /opt/etc/iptables echo "done" exit 0 fi # Load Modules echo "Loading kernel modules ..." insmod $IPT_MODPATH/ip_tables.o insmod $IPT_MODPATH/iptable_filter.o # if you need logging, uncomment line above # (be aware you have installed the kernel-module-ipt-log #insmod $IPT_MODPATH/ipt_LOG.o # Flush Any Existing Rules or Chains echo "Flushing Tables ..." # Reset Default Policies $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT # Flush all rules $IPT -F # Erase all non-default chains $IPT -X if [ "$1" = "stop" ] then echo "Firewall completely flushed! Now running with no firewall." exit 0 fi ############################################################################### # Rules Configuration # Filter Table # Set Policies $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP # User-Specified Chains echo "Create and populate custom rule chains ..." # Create a chain to filter INVALID packets $IPT -N bad_packets # Create another chain to filter bad tcp packets $IPT -N bad_tcp_packets # Create separate chains for icmp, tcp (incoming and outgoing), # and incoming udp packets. $IPT -N icmp_packets # Used for UDP packets inbound from the Internet $IPT -N udp_inbound # Used to block outbound UDP services from internal network # Default to allow all $IPT -N udp_outbound # Used to allow inbound services if desired # Default fail except for established sessions $IPT -N tcp_inbound # Used to block outbound services from internal network # Default to allow all $IPT -N tcp_outbound # Populate User Chains # bad_packets chain # Drop INVALID packets immediately # needs conntrack #$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP # Then check the tcp packets for additional problems $IPT -A bad_packets -p tcp -j bad_tcp_packets # All good, so return $IPT -A bad_packets -p ALL -j RETURN # bad_tcp_packets chain # # All tcp packets will traverse this chain. # Every new connection attempt should begin with # a syn packet. If it doesn't, it is likely a # port scan. This drops packets in state # NEW that are not flagged as syn packets. # needs conntrack #$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \ #--log-prefix "New not syn: " #$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP # Stealth scans $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # All good, so return $IPT -A bad_tcp_packets -p tcp -j RETURN # icmp_packets chain # ICMP packets should fit in a Layer 2 frame, thus they should # never be fragmented. Fragmented ICMP packets are a typical sign # of a denial of service attack. #$IPT -A icmp_packets --fragment -p ICMP -j LOG \ #--log-prefix "ICMP Fragment: " $IPT -A icmp_packets --fragment -p ICMP -j DROP # Echo - uncomment to allow your system to be pinged. # Uncomment the LOG command if you also want to log PING attempts # # $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG \ # --log-prefix "Ping detected: " $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT # comment out above and uncomment below to drop pings without logging. #$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP # see ping reply packets $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT # Time Exceeded $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # Not matched, so return so it will be logged $IPT -A icmp_packets -p ICMP -j RETURN # TCP & UDP # Identify ports at: # http://www.chebucto.ns.ca/~rakerman/port-table.html # http://www.iana.org/assignments/port-numbers # # ADD UDP-based services here # # udp_inbound chain # ports you want to accept udp packets on # netbios/samba $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j ACCEPT # Network Time Protocol (NTP) Server $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT # External DHCP Server # Allow DHCP client request packets inbound from external network $IPT -A udp_inbound -p UDP -s 0/0 --source-port 68 --destination-port 67 -j ACCEPT # DNS in #$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT $IPT -A udp_inbound -p UDP -s 0/0 --source-port 53 -j ACCEPT # Not matched, so return for logging $IPT -A udp_inbound -p UDP -j RETURN # udp_outbound chain # ports you send udp packets to # netbios/samba $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 138 -j ACCEPT # Network Time Protocol (NTP) Server $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT # DHCP out $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 68 -j ACCEPT # DNS out $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT # No match, so ACCEPT # make this DROP if you want to block any other outbound udp traffic $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT # tcp_inbound chain # # This chain is used to allow inbound connections to the SLUG # smb $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 139 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 445 -j ACCEPT # HTTP $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT # FTP $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port ftp -j ACCEPT # Passive $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 33201:33210 -j ACCEPT # DNS $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT # sshd $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT # telnet $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 23 -j ACCEPT # Not matched, so return so it will be logged $IPT -A tcp_inbound -p TCP -j RETURN # tcp_outbound chain # # This chain controlls what tcp traffic is allowed out # http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT # DNS $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT # sshd $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT # No match, so ACCEPT # Note, you could make this DROP to block any other outbound traffic $IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT ############################################################################### # INPUT Chain echo "process INPUT chain ..." # Allow all on localhost interface $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT # Drop bad packets $IPT -A INPUT -p ALL -j bad_packets # ****************************** # Inbound Internet Packet Rules # Accept Established Connections # Needs conntrack module # $IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # packet filter accepts inbound packets that are replies to an outbound connection # use until conntrack is available # this blocks all new connection attempts except to those allowed below $IPT -A INPUT -p TCP -i $INET_IFACE ! --syn -j ACCEPT # Route the rest to the appropriate user chain $IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound $IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound $IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets # Drop without logging broadcasts that get this far. # Comment this line if testing new rules that impact # broadcast protocols. #$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP ############################################################################### # # OUTPUT Chain # echo "Process OUTPUT chain ..." # Generally trust the firewall on output # However, invalid icmp packets need to be dropped # to prevent a possible exploit. # needs conntrack #$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP # Localhost $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT # If you want to block outbound connections, uncomment first section below, comment # out second section, and add rules to tcp_outbound/udp_outbound # To internet - filtered #$IPT -A OUTPUT -p TCP -o $INET_IFACE -j tcp_outbound #$IPT -A OUTPUT -p UDP -o $INET_IFACE -j udp_outbound # To internet (unfiltered) $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT</pre></code> ( Das Script und einen Download findet Ihr unter folgender Adresse NSLU2-Linux - HowTo / EnableFirewall [http://www.nslu2-linux.org/wiki/HowTo/EnableFirewall] ) Gestartet wird die Firewall mit <code><pre>/opt/etc/iptables.sh</pre></code> Anhalten mit <code><pre>/opt/etc/iptables.sh stop</pre></code> Um die Firewall bei jedem Start automatisch zu aktivieren müssen wir einen Link anlegen: <code><pre>ln -s /opt/etc/iptables.sh /opt/etc/init.d/S30iptables</pre></code> Ihr werdet hier jetzt bemerken, dass z.B. Euer Webadmin geblockt ist, weil dieser nicht auf dem Port 80 liegt, sondern einem anderen, den Ihr bereits in der Vergangenheit zugewiesen habt. Um nun den http auch für einen zweiten Port freizugeben ergänzt das Script durch zwei neue Regeln, die Ihr am besten unter die bisherige Port 80 Regel setzt. Sucht dazu folgende Zeilen im Script: <code><pre># http $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT</pre></code> Diese erweitert Ihr folgendermaßen, wenn Ihr Eurem Webadmin z.B. den Port 9055 zugewiesen habt: <code><pre># http $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 9055 -j ACCEPT</pre></code> Das gleiche für den Outbound: <code><pre># http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT</pre></code> in <code><pre># http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 9055 -j ACCEPT</pre></code> Wenn Ihr z.B. den Firefly MP3 Server installiert habt, dann benötigt dieser auch einen freien Port auf 3689 beispielsweise (je nachdem, wie Ihr ihn konfiguriert habt). Gebt diesen Port frei, indem Ihr direkt bei den Portfreigaben im Script folgende Zeilen ergänzt: <code><pre># MT-DAAP $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 3689 -j ACCEPT $IPT -A INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT $IPT -A OUTPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT</pre></code> Die IP 224.0.0.251 ist eine Multicast-Adresse, die hier Apples i-Tunes zum Rendezvous auf dem Port 5353 benötigt. Wird dieser geblockt findet der i-Tunes den NSLU2 Firefly Media Server nicht mehr im Netz. Zum Schluss muss noch die '''/opt/etc/vsftpd.conf''' editiert werden, damit der passive Modus des vsftp FTP Server funktioniert und eine Verbindung wieder möglich wird. Ergänzt nun am Ende der '''vsftp.conf''' folgende Zeilen: <code><pre># for our firewall, only use this range of ports pasv_min_port=33201 pasv_max_port=33210</pre></code> <br /> <br /> <br /> ==Fail2ban installieren und konfigurieren== Zuerst benötigen wir ein Arbeitsverzeichnis. Das legen wir in dem Rootverzeichnis an: <code><pre>mkdir work</pre></code> Dann wechseln wir nach work <code><pre>cd /work</pre></code> Danach laden wir uns Fail2ban herunter: <code><pre>wget http://downloads.sourceforge.net/fail2ban/fail2ban-0.8.3.tar.bz2?modtime=1216338691&big_mirror=0</pre></code> Nun entpacken wir das Programm: <code><pre>tar xvfj fail2ban-0.8.3.tar.bz2</pre></code> Das erstellt uns ein neues Verzeichnis fail2ban-0.8.3 . Hier wechseln wir hinein: <code><pre>cd fail2ban-0.8.3</pre></code> Das wird dann mit <code><pre>python2.4 setup.py install</pre></code> installinstalliert. Die wichtigen Dateien: Die ausführbare Datei '''fail2ban-client''' liegt unter '''/opt/local/bin''' . Die dazugehörige Konfigurationsdatei '''jail.conf''' ist dann unter '''/etc/fail2ban''' zu finden, die dann noch editiert werden muss. Öffnet nun die /etc/fail2ban/jail.conf und sucht nach folgender Sektion, um den ssh einzustellen: <code><pre>[ssh-iptables] enabled = false filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /var/log/sshd.log maxretry = 5</pre></code> Ich habe die z.B. wie folgt eingestellt: <code><pre>[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /opt/var/log/auth.log maxretry = 3 bantime = 3600</pre></code> Das bedeutet hier, dass beim Versuch via ssh sich einzuwählen beim dritten falschen Login ( maxretry = 3) die IP für eine Stunde ( bantime = 3600 ; wird in Sekunden angegeben) gesperrt ist. Das kann man natürlich je nach Gusto anpassen. Vergesst nicht, das '''enabled = false''' auf '''true''' umzustellen, damit der Dienst hier aktiviert wird. Das Gleiche dann für unseren FTP Server (vsftp): <code><pre>[vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] mail-whois[name=VSFTPD, dest=yourmail@mail.com] logpath = /opt/var/log/vsftpd.log maxretry = 5 bantime = 600</pre></code> in <code><pre>[vsftpd-iptables] enabled = true filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] mail-whois[name=VSFTPD, dest=yourmail@mail.com] logpath = /opt/var/log/vsftpd.log maxretry = 5 bantime = 3600</pre></code> Hier erhöhen wir die Sperrdauer auf 1 Stunde und aktivieren den Dienst mit '''enable = true''' . Speichert die Änderungen und startet nun den fail2ban indem Ihr zuerst mit <code><pre>cd /opt/local/bin</pre></code> in das korrekte Verzeichnis wechselt und dann <code><pre>./fail2ban-client start</pre></code> eingebt. Nach erfolgreichen Start seht Ihr folgende Message: '''2007-05-04 00:35:59,100 fail2ban.server : INFO Starting Fail2ban''' Um zu sehen, ob auch die Dienste soweit online sind, setzt folgenden Befehl ab: <code><pre>/opt/local/bin/fail2ban-client status</pre></code> Der Output sollte folgender sein: '''Status |- Number of jail: 2 `- Jail list: ssh-iptables, vsftpd-iptables''' Jetzt checken wir noch die IP Tables ob hier die korrekten Eintragungen vom fail2ban vorgenommen wurden: <code><pre>iptables -L -v</pre></code> Überprüft die Zeilen nun nach folgendem Output: '''0 0 fail2ban-VSFTPD tcp -- any any anywhere anywhere tcp dpt:ftp 181 16496 fail2ban-SSH tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT all -- lo any anywhere anywhere''' Jetzt ist alles roger. Lasst Euch nun die Logfile des fail2ban anzeigen: <code><pre>tail -f /var/log/fail2ban.log</pre></code> Versucht Euch nun mit einem FTP Client einzuwählen und gebt bewusst ein falsches Passwort ein. Wenn Alles gut läuft, bekommt der FTP Client nach dem 5. Versuch keinen Connect mehr. Die Logdatei zeigt dann folgende Zeile: <code><pre>2007-05-04 00:45:27,847 fail2ban.actions: WARNING [vsftpd-iptables] Ban 192.168.0.2 2007-05-04 00:45:28,775 fail2ban.actions.action: ERROR echo -en "Hi,\n The IP 192.168.0.2 has just been banned by Fail2Ban after 5 attempts against VSFTPD.\n\n Here are more information about 192.168.0.2:\n `whois 192.168.0.2`\n Regards,\n Fail2Ban"|mail -s "[Fail2Ban] VSFTPD: banned 192.168.0.2" yourmail@mail.com returned 7f00</pre></code> Hier seht Ihr, dass die IP gesperrt wurde. Wenn Ihr das ausprobiert solltet Ihr vorher vielleicht erstmal die Bandauer auf 60 Sekunden stellen, damit Ihr nicht ewig warten müsst, bis Ihr ge-unbant werdet: <code><pre>2007-05-04 00:46:28,196 fail2ban.actions: WARNING [vsftpd-iptables] Unban 192.168.0.2</pre></code> Natürlich kann man auch, um sich selbst nicht aus Versehen auszusperren, seine eigene IP aus der Überwachung herausnehmen und in der '''/etc/fail2ban/jail.conf''' in die Zeile '''ignoreip''' eintragen. Damit unser Filter auch beim nächsten Boot automatisch startet legen wir jetzt ersteinmal ein Script an: <code><pre>vi /opt/bin/iptrap</pre></code> Das füllen wir mit folgendem Script, das ich einmal kurz zusammengeschrieben habe: <code><pre>#!/bin/bash # Bootscript fuer den fail2ban Client case "$1" in start) rm /tmp/fail2ban.sock rm /var/run/fail2ban/fail2ban.sock echo "Starting IP Trap..." exec /opt/local/bin/fail2ban-client start ;; stop) echo "Stopping IP Trap... leaving machine wide open now ..." exec /opt/local/bin/fail2ban-client stop ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac</pre></code> Damit diese ausführbar ist, fügen wir das Executable Flag dazu: <code><pre>chmod +x /opt/bin/iptrap</pre></code> Diese kommt nun zu unseren init-Scripten: <code><pre>ln -s /opt/bin/iptrap /opt/etc/init.d/S35iptrap</pre></code> Jetzt können wir die Kiste neu starten und hoffen, dass wir ein Stückchen sicherer geworden sind: <code><pre>sync reboot</pre></code> <br /> <br /> <br /> ==Meldung per E-Mail== Damit wir nicht immer regelmäßig die Log-Datei nach Sperrungen durchsuchen zu müssen, gibt es einen sehr komfortablen Weg, sich die Sperrungen per E-Mail zusenden zu lassen. Dabei ist es sogar möglich, gleich eine '''whois''' Abfrage zu starten und das Ergebnis in die Mail zu schreiben. Hierzu muss der Mailer '''nail''' und whois installiert werden: <code><pre>ipkg install nail ipkg install whois</pre></code> Danach verknüpfen wir das Programm nail mit dem Programmaufruf mail, weil die ganzen Scripte ein "mail" anstatt "nail" erwarten: <code><pre>ln -s /opt/bin/nail /opt/bin/mail</pre></code> Jetzt müssen wir noch unseren smtp Server und Absender festlegen. Dazu müssen wir unter dem Heimatverzeichnis von /root die Datei .mailrc anlegen. Am besten mit vi aufmachen: <code><pre>vi .mailrc</pre></code> und folgende Zeilen eingeben (entsprechend Euren Server/Absender abändern): '''set smtp=smtp. euerserver. de'''<br /> '''set from=meine @mail. blah''' Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen: '''set smtp-auth-user=Loginname'''<br /> '''set smtp-auth-password=Passwort''' Da hier das Passwort in klar lesbarer Form in der '''.mailrc''' hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben. Nun müssen wir noch Eure Empfängeradresse festlegen und diverse Einstellungen vornehmen. Hierzu öffnet wieder die '''/etc/fail2ban/jail.conf''' und ändert in jedem Abschnitt, den Ihr auf "'''true'''" gesetzt habt die Platzhalter Adresse '''dest=yourmail @mail. com''' entsprechend Eurer gewünschten Empfängeradresse um. Ebenso schreibt das '''sendmail-whois''' in '''mail-whois''' um. Dann fügt noch folgende Zeilen unter die Zeile '''findtime = 600''' ein: <code><pre>mta = mail action = %(action_mwl)s</pre></code> Seit fail2ban 0.8.x wurden die Scripte von mail auf sendmail umgestellt. Das machen wir mit obigen Eintrag rückgängig. Zudem legen wir mit action fest, dass eine komplette whois Auskunft über den Angreifer gezogen wird. Stoppt nun Eure Firewall und startet diese wieder neu, damit die Änderungen übernommen werden. Wenn alles richtig konfiguriert ist bekommt Ihr nun gleich die erste Mail, dass der Fail2ban Dienst gestartet wurde. Wenn Ihr Eure IP-Falle allerdings beim Systemstart automatisch hochfahren lasst, kann es sein, dass Ihr keine E-Mails erhaltet. Das liegt daran, dass nicht der User "root" den Dienst startet, sondern das System selbst. Um dennoch auch beim automatischen Start die Mails zu bekommen fügt die SMTP Daten einfach in die '''/opt/etc/nail.rc''' ein, damit diese als Standardeinstellungen übernommen werden. Wenn Ihr die Slug nun neu startet sollte dann nach erfolgreichem Bootup die Meldung in Eurem Postfach landen, dass die IP Falle nun scharf ist: <code><pre>Hi, The jail SSH has been started successfuly. Regards, Fail2Ban</pre></code> An der Stelle komme ich nun zum Ende meines Vorschlages, die NSLU2 im Netz einwenig sicherer zu machen. Dennoch vergesst nie, wie ich es bereits eingangs schon erwähnte, die Augen offen zu halten und Eure Log-Dateien regelmäßig zu kontrollieren! <br /> <br /> <br /> add92f253fa10ecdfdc8f62e267aa36d4912b4d2 Backupmaschine 0 36 336 45 2010-09-01T13:28:25Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Die Slug als intelligente Backupmaschine== Um ein Sicherungskonzept macht man sich in der Regel dann erst Gedanken, wenn es einmal zum Datengau gekommen ist. Dank unserer kleinen NSLU2 muss es aber hier nicht erst soweit kommen. Als Beispiel haben wir einen Windowsrechner (wir verwenden in diesem Tutorial ein Vista) im Netz, auf dem wir ein Verzeichnis haben, das unsere ganzen wichtigen Dokumente beinhaltet. Wir möchten jetzt, dass dieses Verzeichnis in regelmäßigen Abständen auf die Slug kopiert wird und zudem noch alte Sicherungen für eine gewisse Zeit aufgehoben werden, die wir bei Bedarf wieder heranziehen können, wenn etwas zu voreilig gelöscht wurde. Zu jeder Zeit soll aber über das Netzwerk auf unsere letzte Sicherung zugegriffen werden können, ohne dass wir großmächtig ein Backup wiederherstellen müssen. Achso... natürlich soll das vollautomatisch gehen, ohne dass wir da auf unsere Slug zugreifen müssen. Da wir aber auch nicht ständig die Logfiles der Slug ansehen wollen, soll uns die NSLU2 noch selbstständig E-Mails schicken, wenn gerade ein Backup gemacht wird und wenn es erfolgreich verlaufen ist. Das alles kann die Slug? Aber natürlich! Die richtigen Programme vorausgesetzt und ein kleines Script, dass ich für diesen Zweck geschrieben habe. <br /> <br /> <br /> ==Vorbereitungen auf unseren Windows Rechner== <div style="float:right;text-align:center;padding-left:20px"> [[Bild:slug20.png]] </div> Damit die NSLU2 später auf unseren Windowsrechner zugreifen kann benötigen wir ein eigenes Benutzerkonto mit Passwort. Legt das auf Eurem Windowsrechner an, falls nicht schon vorhanden. Ihr solltet hierfür nicht das Administratorenkonto verwenden, sondern nur ein eigenen User. Ich habe diesen in unserem Beispiel "backup" genannt. Auch bekommt er das Passwort "backup". Ihr werdet sicherlich ein etwas sicherers Passwort auswählen, aber für unser Beispiel genügt dieses erstmal. Gebt nun das gewünschte Sicherungsverzeichnis frei. Es können natürlich auch mehrere Verzeichnisse verwendet werden, dazu muss aber später unser Script einwenig angepasst werden. Zur Demonstartion des Sicherungskonzeptes genügt erstmal ein Verzeichnis. Öffnet zuerst den Windows Dateimanager "Explorer" indem Ihr auf das Startsymbol rechts klickt und "Explorer" auswählt: Klickt nun mit rechts auf das zu freigebende Verzeichnis und dort auf "Freigabe..." : [[Bild:slug21.png|center]] Wählt nun das Konto aus, das eine Freigabe für das Verzeichnis erhält: [[Bild:slug22.png|center]] Klickt dann auf "'''Hinzufügen'''" : [[Bild:slug23.png|center]] Wenn Ihr mögt könnt Ihr noch die Art der Freigabe von "Leser" auf "Mitbesitzer" ändern. Das ist allerdings optional, denn zum Sichern müssen wir nur lesen können: [[Bild:slug24.png|center]] Danach kommt noch eine Sicherheitsabfrage. Seid Ihr zu dem Zeitpunkt kein Administrator, werdet Ihr noch nach dem Admin-Passwort gefragt: [[Bild:slug25.png|center]] Danach noch kurz eine Statusanzeige, dass das Verzeichnis nun freigegeben ist: [[Bild:slug26.png|center]] Damit steht schonmal Euer Windows Share. Nun legen wir noch eine neue Datei direkt in das freigebene Verzeichnis an. Diese ist notwendig, damit unser Sicherungsscript später dieses Verzeichnis auch als Sicherungsverzeichnis akzeptiert. Legt dazu ein neues Textdokument an: [[Bild:slug27.png|center]] Benennt diese Datei in "'''sichern'''" um. Die Endung sollte '''.txt''' sein. Also '''sichern.txt'''. [[Bild:slug28.png|center]] Der Hintergrund hierzu ist, dass Ihr auf die Art und Weise ganz einfach ein Backup stoppen könnt, ohne das Script selbst auf der Slug anhalten zu müssen. Benennt die sichern.txt um oder löscht diese, dann wird das Verzeichnis solange nicht gesichert, bis Ihr wieder die sichern.text in dieses Verzeichnis packt. Wenn Ihr soweit alles vorbereitet habt, dann können wir uns an die Slug machen. <br /> <br /> <br /> ==Vorbereitungen auf der Slug== Meldet Euch auf der slug an und installiert (falls noch nicht geschehen) folgende Pakete: nail (Mailprogramm für die Konsole)<br /> coreutils (diverse Tools für die Kommandozeile)<br /> rsync (Backupprogramm)<br /> <code><pre>ipkg install coreutils nail rsync</pre></code> Solltet Ihr diesen Schritt vergessen, wird das das Script für Euch erledigen. Ebenso muss noch eine log-Datei angelegt werden: <code><pre>touch /var/log/backup</pre></code> Damit nun uns die NSLU2 auch Messages schicken kann, muss noch der nail konfiguriert werden. Öffnet hierfür die '''/opt/etc/nail.rc''' mit einem Editor (vi z.B.) und ergänzt folgende Zeilen am Ende der Datei (entsprechend Euren Server/Absender abändern): '''set smtp=smtp. euerserver. de'''<br /> '''set from=meine @mail. blah'''<br /> Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen: '''set smtp-auth-user=Loginname'''<br /> '''set smtp-auth-password=Passwort'''<br /> Da hier das Passwort in klar lesbarer Form in der .mailrc hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben. Zur Sicherung selbst legt Euch auf der Slug einen neuen User an, der ein eigenes Verzeichnis bekommt. Diesen nennen wir z.B. auch '''backup''' und der hat das Verzeichnis '''/backup'''. Dorthin wollen wir die Sicherungen schreiben und können auch später über diesen User auf die Sicherungen zugreifen. Das war's dann auch schon mit der Vorarbeit. Kommen wir zum eigentlichen Script... <br /> <br /> <br /> ==Das Backupscript== Legt nun das Backupsript in ein Verzeichnis an. Ihr könnt dies z.B. in das Verzeichnis '''/opt/bin''' kopieren. Hier das Listing meiner '''backup.sh''' backup.sh <code><pre>#!/bin/sh # Backupscript fuer die NSLU2 -- ROTIEREND -- # Gargi 2007 # getestet auf unslung 6.8 beta !!!! # Das Script funktioniert nur mit den installierten nail, coreutilis und rsync: # ipkg install coreutils rsync nail # Bitte noch eine logdatei anlegen: # touch /var/log/backup # KONFIGURATIONSBEREICH ######################## ip=192.168.1.3 # Die IP des zu scannenden Rechner verzeichnis=transfer # Das zu sichernde freigegebene Verzeichnis # Weitere Verzeichnisse koennen ergaenzt werden # verzeichnis2=xyz loginname=backup # Loginname auf den zu sichernden Rechner loginpassword=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann btarget=backup # Zielverzeichnis der Backups auf der Slug intervall=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen mailadresse=mein @ mailadresse.de # Deine E-Mailadresse # ENDE DES KONFIGURATIONSBEREICHES########## # Stelle fest, ob bereits ein Sync laeuft um ressourcen zu schonen if [ -f /tmp/backup.lock ] then echo "backup.lock gefunden. Breche Vorgang ab." echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Fein, die Slug hat Luft fuer ein Backup fi # Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren if [ -f /opt/bin/rsync ] then echo "rsync ist installiert, alles bestens" else ipkg install rsync fi if [ -f /opt/bin/wc ] then echo "coreutils sind installiert, alles bestens" else ipkg install coreutils fi if [ -f /opt/bin/nail ] then echo "nail ist installiert, alles bestens" else ipkg install nail echo "bitte konfiguriere den Nail" fi # schauen wir, ob wir loggen koennen if [ -f /var/log/backup ] then echo "wir haben ein logfile, nice" else touch /var/log/backup fi # Noch ein paar Variablen Datum=$(date +%d.%m.%g--%R) SDatum=$(date +%d.%m.%g) # Pruefe die letzte Sicherung auf das Alter ergebnis=`find /$btarget/*.1.tar.gz -type f -mtime +$intervall | wc -l` # Checken ob das der erste Sicherungslauf ist ls /$btarget/*.tar.gz if [ $? != 0 ]; then zusatz=1 else zusatz=0 fi # Schwellenwert errechnen let "schwelle=$ergebnis + $zusatz" if [ $schwelle = 0 ]; then # wir sind auf dem aktuellen Stand echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup echo Backup ist auf dem letzten Stand # Bitte folgende Zeilen auskommentieren falls diese Mail nicht gewuenscht ist echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis hierher maximal auskommentieren exit 1 else # Stelle fest, ob Rechner im Netz aktiv ist ping -c 1 $ip > /dev/null if [ $? = 0 ]; then # Rechner ist gefunden, starte Backupprozedur echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup echo Zielrechner gefunden sleep 2 # Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch # rm -r /$btarget/$verzeichnis # rm -r /$btarget/$verzeichnis2 # Mounte den Sambashare des zu sichernden Pfades mkdir /mnt/$verzeichnis # mkdir /mnt/$verzeichnis2 smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword # smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword # Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share if [ -f /mnt/$verzeichnis/sichern.txt ] then #Sperrdatei anlegen touch /tmp/backup.lock echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung per E-Mail." > mail.txt nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Fahre das Backup, veraendere die Zugriffsrechte rsync -a /mnt/$verzeichnis /$btarget/ --delete # rsync -a /mnt/$verzeichnis2 /$btarget/ --delete chown -R $btarget:everyone /$btarget chmod -R 755 /$btarget # Backupverzeichnis wieder aushaengen umount /mnt/$verzeichnis # umount /mnt/$verzeichnis2 # Backup-Rolle, loesche aeltestes Backup rm /$btarget/save.3.tar.gz mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz # Gesicherte Dateien kompremieren tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis # Weitere Verzeichnisse bitte wie folgt anhaengen: # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2 gzip /$btarget/*.1.tar # Benachrichtigungen fuer das Protokoll und per E-Mail echo "$Datum ($ip): Backuped successfully" >> /var/log/backup echo Backup beendet echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Entferne Sperrdatei rm /tmp/backup.lock else echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun. # Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist: echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. exit 1 fi else echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup # Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist: echo "$Datum ($ip): Server is dead ... nothing to care about" > mail.txt nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. fi fi</pre></code> Im oberen Bereich gibt es nun ein paar Dinge für Euch zum eintragen. Ich liste die Variablen, die Ihr anpassen müsst einmal hier gesondert auf: '''ip'''=192.168.1.3 # Die IP des zu scannenden Rechner<br /> '''verzeichnis'''=transfer # Das zu sichernde freigegebene Verzeichnis<br /> '''loginname'''=backup # Loginname auf den zu sichernden Rechner<br /> '''loginpassword'''=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann<br /> '''btarget'''=backup # Zielverzeichnis der Backups auf der Slug<br /> '''intervall'''=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen<br /> '''mailadresse'''=mein @ mailadresse.de # Deine E-Mailadresse<br /> Über die IP legen wir den Rechner im Netzwerk fest, aus dem das Backup gezogen werden soll. Dazu verraten wir dem Script, wie das freigegebene Verzeichnis auf dem zu sichernden Rechner heißt. Der Loginname und das Passwort betrifft das Windowsshare, das wir auf unserem Windowsrechner angelegt haben. Die Variable btarget ist das Ziel auf der Slug, in denen die Dateien kopiert werden. Das ist genau das Heimatverzeichnis des Useres auf der Slug, den wir für die Sicherung angelegt haben. Hierauf können wir dann später auch wieder im Netz auf dieses Samba Share zugreifen und unsere Sicherungsdateien bei Bedarf wieder herholen. Zu guterletzt geben wir noch eine Mailadresse an, an der wir die Statusmelungen schicken. Das sollte natürlich Eure eigene Mailadresse sein. Wenn Ihr die Datei '''/opt/bin/backup.sh''' angelegt habt, dann ändern wir die Zugriffsrechte und stellen damit sicher, dass nur root die Datei lesen darf: <code><pre>chmod 711 /opt/bin/backup.sh</pre></code> Damit die Datei auch über die crontab regelmäßig ausgeführt wird, ergänzen wir eine Zeile in die crontab indem wir einfach folgenden Befehl eingeben: <code><pre>echo */30 * * * * root sh /opt/bin/backup.sh >> /etc/crontab</pre></code> Mit '''vi /etc/crontab''' könnt Ihr das natürlich auch manuell erledigen, oder zumindest prüfen, ob die Zeile auch tatsächlich sich nun in der crontab befindet. Das */30 sorgt dafür, dass nun das Script alle 30 Minuten gestartet wird und seinen Dienst verrichtet. Jetzt startet Eure Slug neu. Danach ist das Script aktiv. Sollte das Script nicht so laufen, wie Ihr wollt, dann meldet Euch wieder an und startet das Script manuell: <code><pre>sh /opt/bin/backup.sh</pre></code> und seht Euch eventuelle Fehlermedlunegn an. Auch könnte die lokale Logdatei Auskunft über Probleme geben: <code><pre>tail -f /var/log/backup</pre></code> Das obige Script ist dann sehr gut einsetzbar, wenn das Dateivolumen nicht allzu groß ist, da der gzip schon einiges an Zeit benötigt, um große Dateien zu packen. Wer aber 30, 40, 50 GB zu verarbeiten hat, wird wohl auf der NSLU2 mit ihren maximal 266MHz ARM Prozessor nicht recht glücklich werden. Hier empfiehlt es sich, auf ein rotierendes Backup zu verzichten, und nur eine Sicherung offen anzulegen, sodass die Pfade im Prinzip nur 1:1 auf der Platte der NSLU2 gespiegelt werden. Zudem kann über das Netz eine Sicherung von mehreren GB auch recht langwierig werden. Wer bei 50 GB die Sicherung nicht über Nacht laufen lassen möchte, der kann natürlich die externe Platte an seinen Rechner direkt anschließen, und die Verzeichnisse erstmal komplett in das Backupverzeichnis der USB Platte kopieren. Ich habe hier als zweite Variante eines Backupsriptes nun ein Beispiel mit 6 Shares geschrieben. Zudem um ein Feature erweitert: Ich grenze die Zeit ein, in der ein Backup gefahren werden darf. Und zwar möchte ich z.B. dass die Backups erst nach 9 Uhr gefahren werden, da z.B. mein Rechner in der Regel vor 9 Uhr wenn überhaupt nur kurzfristig an ist. Somit vermeide ich, dass ich eventuell während eines Backups gezwungen bin, die Maschine auszuschalten. <code><pre>#!/bin/sh # Backupscript fuer die NSLU2 -- mit Zeitstempel -- # Gargi 2007 # getestet auf unslung 6.8 beta !!!! # Das Script funktioniert nur mit den installierten nail, coreutilis und rsync: # ipkg install coreutils rsync nail # Bitte noch eine logdatei anlegen: # touch /var/log/backup # KONFIGURATIONSBEREICH ######################## ip=192.168.1.5 # Die IP des zu scannenden Rechner verzeichnis=transfer1 # Das zu sichernde freigegebene Verzeichnis verzeichnis2=transfer2 verzeichnis3=transfer3 verzeichnis4=transfer4 verzeichnis5=transfer5 verzeichnis6=transfer6 # Weitere Verzeichnisse koennen ergaenzt werden # verzeichnis2=xyz loginname=backup # Loginname auf den zu sichernden Rechner loginpassword=1234567 # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann btarget=backup # Zielverzeichnis der Backups auf der Slug intervall=3 # Groesse des Intervalls an Tagen zwischen den Sicherungen mailadresse=meine @ emailaddy.de # Deine E-Mailadresse uhrzeit=09 # Ab dieser Stunde werden erst Backupsgezogen. Vorher nicht. # ENDE DES KONFIGURATIONSBEREICHES########## # Stelle fest, ob bereits ein Sync laeuft um Ressourcen zu schonen if [ -f /tmp/backup.lock ] then echo "backup.lock gefunden. Breche Vorgang ab." echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Fein, die Slug hat Luft fuer ein Backup fi # Beende das Script vor einer bestimmten Uhrzeit zeit=$(date +%H) if [ $zeit -lt $uhrzeit ];then echo das ist mir zu bald am morgen echo "Zwischen 0 und $uhrzeit Uhr sind Backups ausgeklammert. Stoppe Funktion bis $uhrzeit Uhr" > mail.txt nail -s "[Backup] Guten Morgen Nachricht" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Die Zeit geht in Ordnung, wir koennen versuchen, das Backup zu starten. fi # Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren if [ -f /opt/bin/rsync ] then echo "rsync ist installiert, alles bestens" else ipkg install rsync fi if [ -f /opt/bin/wc ] then echo "coreutils sind installiert, alles bestens" else ipkg install coreutils fi if [ -f /opt/bin/nail ] then echo "nail ist installiert, alles bestens" else ipkg install nail echo "bitte konfiguriere den Nail" fi # schauen wir, ob wir loggen koennen if [ -f /var/log/backup ] then echo "wir haben ein logfile, nice" else touch /var/log/backup fi # Noch ein paar Variablen Datum=$(date +%d.%m.%g--%R) SDatum=$(date +%d.%m.%g) # Pruefe die letzte Sicherung auf das Alter ergebnis=`find /$btarget/*.tstamp.txt -type f -mtime +$intervall | wc -l` # Checken ob das der erste Sicherungslauf ist ls /$btarget/*.tstamp.txt if [ $? != 0 ]; then zusatz=1 else zusatz=0 fi # Schwellenwert errechnen let "schwelle=$ergebnis + $zusatz" if [ $schwelle = 0 ]; then # wir sind auf dem aktuellen Stand echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup echo Backup ist auf dem letzten Stand # Bitte folgende Zeilen falls diese Mail nicht gewuenscht ist echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis hierher maximal auskommentieren exit 1 else # Stelle fest, ob Rechner im Netz aktiv ist ping -c 1 $ip > /dev/null if [ $? = 0 ]; then # Rechner ist gefunden, starte Backupprozedur echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup echo Zielrechner gefunden sleep 2 # Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch # rm -r /$btarget/$verzeichnis # rm -r /$btarget/$verzeichnis2 # Mounte den Sambashare des zu sichernden Pfades mkdir /mnt/$verzeichnis mkdir /mnt/$verzeichnis2 mkdir /mnt/$verzeichnis3 mkdir /mnt/$verzeichnis4 mkdir /mnt/$verzeichnis5 mkdir /mnt/$verzeichnis6 smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis3 /mnt/$verzeichnis3 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis4 /mnt/$verzeichnis4 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis5 /mnt/$verzeichnis5 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis6 /mnt/$verzeichnis6 -o username=$loginname,password=$loginpassword # Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share if [ -f /mnt/$verzeichnis/sichern.txt ] then #Sperrdatei anlegen touch /tmp/backup.lock echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung per E-Mail." > mail.txt nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Fahre das Backup, veraendere die Zugriffsrechte rsync -a /mnt/$verzeichnis /$btarget/ --delete rsync -a /mnt/$verzeichnis2 /$btarget/ --delete rsync -a /mnt/$verzeichnis3 /$btarget/ --delete rsync -a /mnt/$verzeichnis4 /$btarget/ --delete rsync -a /mnt/$verzeichnis5 /$btarget/ --delete rsync -a /mnt/$verzeichnis6 /$btarget/ --delete chown -R $btarget:everyone /$btarget chmod -R 755 /$btarget # Backupverzeichnis wieder aushaengen umount /mnt/$verzeichnis umount /mnt/$verzeichnis2 umount /mnt/$verzeichnis3 umount /mnt/$verzeichnis4 umount /mnt/$verzeichnis5 umount /mnt/$verzeichnis6 # Backup-Rolle, loesche aeltestes Backup # rm /$btarget/save.3.tar.gz # mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz # mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz # Gesicherte Dateien kompremieren # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis # Weitere Verzeichnisse bitte wie folgt anhaengen: # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2 # gzip /$btarget/*.1.tar # Loesche alten Zeitstempel rm /$btarget/*.tstamp.txt # Setze neuen Zeitstempel touch /$btarget/$SDatum.tstamp.txt # Benachrichtigungen fuer das Protokoll und per E-Mail echo "$Datum ($ip): Backuped successfully" >> /var/log/backup echo Backup beendet echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Entferne Sperrdatei rm /tmp/backup.lock else echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun. # Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist: echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. exit 1 fi else echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup # Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist: echo "$Datum ($ip): Server is dead ... nothing to care about" > mail.txt nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. fi fi</pre></code> Falls Ihr nun mehre Rechner im Netz sichern wollt, dann legt hierfür ein neues Script an. Dieses startet über die cron einwenig zeitversetzt zum anderen Script, damit die sich nicht so leicht in die Quere kommen. Damit dies aber auch nicht passieren kann und die Slug durch zwei parallel laufenden Backupvorgänge in die Knie gezwungen wird, habe ich einen Sperrmechanismus integriert, der dafür sorgt, dass ein zweites Script nur dann starten kann, wenn das erste auch beendet ist. Viel Spaß beim Sichern! <br /> <br /> <br /> de512517eb7aa0822c987b86801128ab9c5f29e9 IMAP Mail Server 0 46 337 55 2010-09-01T13:28:44Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> '''IMAP Server auf der NSLU2 mit Dovecot und getmail''' ==Erste Gedanken über einen optimalen Aufbau== Voraussetzungen: Auf der NSLU2 befindet sich unslung 6.8. Das System ist entsprechend vorbereitet und ich empfehle zur einfacheren und sicheren Administration die Installation des Midnight Commanders und openssh. Im Grunde möchten wir einen Mailserver einrichten, der für uns die E-Mails immer vorrätig hält. Wir möchten vom internen Netz und aber auch einmal von außerhalb auf unsere Mailbox zugreifen. Hierzu muss der IMAP Server entsprechend von außen her erreichbar sein. Unsere NSLU2 soll in regelmäßigen Abständen unsere unterschiedlichen Postfächer diverser Provider abrufen und an unsere Postfächer auf der NSLU2 ausliefern. Via Webmail oder daheim vom Client aus wollen wir darauf zugreifen können. Natürlich können wir dann auch einen Client auf unserem Laptop installieren, der auch auf die Mailboxen der NSLU2 direkt zugreifen kann. Hierfür benötigen wir auf unserer NSLU2 einen IMAP Server (Dovecot [http://www.dovecot.org/]) und ein Programm, das unsere Mailboxen nach neuen Mails prüft und zu uns auf den Mailserver holt (Getmail). Einen besseren Überblick über unser Projekt bekommt man über folgendes Schema, das den Weg der Mails und die Aufgaben der einzelnen Komponenten in diesen Kreislauf veranschaulichen soll: [[Bild:slug29.jpg|center]] Man kann im Grunde eine IMAP Umgebung auf zwei Arten einrichten. Die eine wäre die Verwendung von Mailboxen, wobei alle Mails in eine Datei gespeichert werden. Die Gefahr hierbei ist allerdings, dass wenn diese einzelne Datei beschädigt wird, man eventuell alle E-Mails auf einen Rutsch verlieren kann. Zudem kann das System langsam werden, je größer die Datei wird. Ich empfehle daher die zweite Variante zu verwenden, das Mailverzeichnis (maildir). Innerhalb eines Mailverzeichnisses werden die E-Mails jeweils als eine einzelne Datei pro Email abgelegt. Zudem besteht auch hier die Möglichkeit, dass der Client erstmal nur die Mailheader synchronisiert und nicht die kompletten E-Mails mit Inhalt als Spiegelbild des IMAP Servers. Zudem macht ein inkrementales Backup bei vielen kleinen Dateien mehr Sinn, da nur die Veränderungen in den Teilbereichen neu gespeichert werden müssen und nicht jedes mal eine einzige große Datei. Danach entscheiden wir uns die '''/etc/passwd''' Datei zur Authentifizierung zu verwenden. Also das verschlüsselte Passwort für den einzelnen Nutzer, den wir auf der SLUG generieren. Das hat zudem den Vorteil, dass wir auch so auf jede einzelne Mailbox intern via SMP zugreifen können, um mal ein manuelles Backup der Mailverzeichnisse zu machen oder auch einmal um etwas zu reparieren. <br /> <br /> <br /> ==Vorbereitung und Einrichten der ersten Mailbox== Für jede Mailbox legen wir uns einen neuen User über die Webadministratur der NSLU2 an. Dabei richten wir dem Mailbox User einen eigenen Share ein, den man auch ein Quota-Limit verpassen kann, wenn zu wenig Platz auf der NSLU2 vorhanden sein sollten. Das Heimatverzeichnis eines NSLU2 Users ist bekanntlich nicht unter '''/home''' zu suchen, sondern das liegt direkt Wurzelverzeichnis der NSLU2. Ganz wichtig hierbei ist zu beachten, dass die Verzeichnisse und Dateien innerhalb des Userverzeichnisses dem Nutzer (also Name der Mailbox) und der Gruppe everyone gehören. Alle Files darunter müssen diese User/Gruppenrechte haben. Ändert diese also entsprechend ab, solltet Ihr einmal Dateien als root hier hineinkopieren. Danach editiert die '''/etc/passwd''' Datei und ändert hinten in der Zeile Eures Nutzers wie folg ab: '''mailboxname:1234verschlüsseltps:2008:501:::/dev/null''' in '''mailboxname:1234verschlüsseltps:2008:501::/mailboxname:/bin/sh''' Ihr gebt damit dem System noch einmal das korrekte Homeverzeichnis und die Shell vor. Das ist wichtig, weil später der getmail-Prozess ein Script ausführen wird und Ihr eventuell über su von root zum User wechseln müsst, um Arbeiten an diversen Scripten vornehmen zu können oder bestehende umzukopieren. Jetzt loggt Euch von Eurem Rechner auf die NSLU2 via smb ein und legt das Verzeichnis '''mailbox''' und '''.getmail''' an. Das Getmail Verzeichnis muss ein verstecktes Verzeichnis sein, deswegen der "." vor getmail . Unterhalb vom Verzeichnis '''mailbox''' legt noch die Verzeichnisse '''cur''', '''new''' und '''tmp''' an. Damit haben wir den ersten Nutzer angelegt. Später müssen wir noch zwei Dateien anlegen, nachdem die dazugehörigen Serverprogramme laufen. <br /> <br /> <br /> ==Den Server installieren== Loggt Euch nun via ssh auf Eure NSLU2 als root ein und installiert dovecot, getmail cron und python: <code><pre>ipkg install dovecot py25-getmail cron python</pre></code> Das erstellt dann alle notwendigen Skripte auf Eurer Maschine. Als nächstes müssen wir den Dovecot konfigurieren. Editiert '''/opt/etc/dovecot/dovecot.conf''' und sucht nach der '''default_mail_env''' Variable und ändert diese auf <code><pre>default_mail_env = maildir:/%u/mailbox</pre></code> ab. Damit stellen wir sicher, dass das Zielverzeichnis das Verzeichnis "mailbox" im jeweiligen Userverzeichnis ist. Die Variable %u sorgt dafür, dass dann jeder User seine Mails in das Verzeichnis mailbox bekommt, der dafür vorgesehen ist und wir das nicht einzeln hier festlegen müssen. Nun arbeiten wir auf der NSLU2 als normaler Nutzer weiter. Gebt dazu <code><pre>su</pre></code> Euer Mailboxnameein. Sollte das nicht funktionieren und Ihr bekommt nur die Anzeige seitens des Programmes tinylogin, so müsst Ihr noch die Entwicklerdateien der SLUG installieren. Holt das mit <code><pre>ipkg install optware-devel</pre></code> nach. Dann könnt Ihr mit su wechseln. Wechselt dann in das Mailverzeichnis <code><pre>cd /maiboxname</pre></code> und legt eine neue Datei getmail.sh an. <code><pre>touch getmail.sh</pre></code> Füllt diese mit folgenden Inhalt über '''vi''' oder '''mcedit''' <code><pre>#!/bin/sh # get the mails for the user directory /opt/bin/getmail -q --rcfile /username/.getmail/mailrc</pre></code> Der "username" ist natürlich der Platzhalter für den Namen Eurer Mailbox, den Ihr bitte entsprechend ändert. Das Skript MUSS nun ausführbar gemacht werden: <code><pre>chmod +x getmail.sh</pre></code> Prüft, ob die Nutzer der Datei richtig gesetzt sind (wir erinnern uns: username:everyone) <code><pre>ls -la</pre></code> Falls hier etwas nicht passen sollte, dann bitte sofort abändern: <code><pre>chown username:everyone getmail.sh</pre></code> Jetzt können wir den Getmail vorbereiten. Die Aufgabe von Getmail wird es sein, die E-Mails von außerhalb aus unseren Mailboxen abzuholen um diese dann an unser mailbox-Verzeichnis weiter zu geben. Damit getmail die dafür benötigten Informationen wie Zugangsdaten und Zielverzeichnis geliefert bekommt legt eine Datei unter '''/mailboxname/.getmail''' mit dem Namen '''mailrc''' an. Füllt diese wie folgt: <code><pre>[options] delete = true [retriever] type = SimplePOP3Retriever server = pop.deinmailserver.de username = username_mailserver password = passwort [destination] type = Maildir path = /mailboxname/mailbox/</pre></code> Auch hier wieder die korrekten Besitzrechte ändern, falls nicht ordentlich gesetzt: <code><pre>chown username:everyone mailrc</pre></code> Solltet Ihr nicht wollen, dass die Mails vom Mailserver gelöscht werden (weil Ihr diese z.B. mit einem weiteren Mailer nochmals herunterladen und sichern wollt) dann sollte die '''mailrc''' wie folgt geändert werden: <code><pre>[options] delete = false read_all = false [retriever] type = SimplePOP3Retriever server = pop.deinmailserver.de username = username_mailserver password = passwort [destination] type = Maildir path = /mailboxname/mailbox/</pre></code> Testet nun mit einem '''sh getmail.sh''' ob der Maildownload funktioniert. Schickt Euch zum Test vorher selbst eine E-Mail zu. Schaut im Verzeichnis '''/mailbox/new''' nach, ob dort sich eine E-Mail befindet. Damit getmail in Zukunft zu regelmäßigen Zeiten Eure Mailboxen nach E-Mails absucht müssen neue Cronjobs eingerichtet werden. Der normale Corn, der in der unslung bereits vorhanden ist hat hier leider ein Manko: Er kann nur Crons seitens des root-Nutzers ausführen. Getmail arbeitet allerdings aus Sicherheitsgründen nur als normaler User. Deswegen haben wir uns bereits eine weitere cron- Alternative eingangs installiert. Die Cronjobs werden hierfür nun unter '''/opt/var/cron/crontabs''' abgelegt. Den ersten müssen wir der Einfachkeit halber als root anlegen. Solltet Ihr nicht bereits wieder "root" sein und noch als User angemeldet, dann verlasst diese Ebene mit einem <code><pre>exit</pre></code> Nun starten wir den cron Editor mit <code><pre>crontab -e</pre></code> Folgende Zeile wie mit dem vi Editor eingeben: <code><pre>*/5 * * * * /username/getmail.sh &>/dev/null</pre></code> Das wird den getmail für den speziellen User alle 5 Minuten auslösen. Ändert den Wert nach Euren Vorstellungen ab und speichert die Änderung. Da wir den Job allerdings als User ausführen müssen kopiert <code><pre>cp /opt/var/cron/crontabs/root /opt/var/cron/crontabs/username</pre></code> Ganz wichtig hier ist, dass Ihr nicht vergesst, die richtigen Benutzer auf Euren nene cron zu schlüsseln. Auch hier wie gewohnt: <code><pre>chown username:everyone /opt/var/cron/crontabs/username</pre></code> Jetzt editiert nocheinmal die root crontab <code><pre>vi /opt/var/cron/crontabs/root</pre></code> und werft wieder die getmail- Zeile dort raus. Denn schließlich liegt die jetzt in der User Cron und hat da nichts mehr unter root verloren. Ihr müsst später dann für JEDEN neuen User eine zusätzliche cron einrichten. In der Cron Datei müsst Ihr dann jeweils den Pfad ändern und immer den korrekten Benutzer und die Gruppe setzen wenn Ihr die Datei von einer alten Cron auf Eure neue Cron kopiert. Nach jeder Änderung startet den Cron Dämon neu: <code><pre>/opt/etc/init.d/S10cron /opt/etc/init.d/S90dovecot restart</pre></code> Ein Neustarten der NSLU2 ist damit nicht notwendig. Nun ist es an der Zeit, unseren neuen Server zu testen. Mittels eines Mail Client legt Euch ein neues Postfach für IMAP an. Schickt Euch selbst eine Email und wartet einwenig ab. Wenn alles gut gelaufen ist bekommt Ihr Eure erste E-Mail via IMAP zugestellt. Für alle weiteren Mailboxen müsst Ihr obige Schritte wiederholen. Diese in einer Kurzübersicht: '''1)''' Lege einen neuen Nutzer mit einem Share via Webadmin an<br /> '''2)''' Lege das mailbox und .getmail Verzeichnis an<br /> '''3)''' Erstelle die rc Datei für getmail im .getmail Verzeichnis und gebe dort den Zugang zur externen Mailbox an<br /> '''4)''' Erstelle das getmail.sh Skript im Heimatverzeichnis der Mailbox<br /> '''5)''' Lege einen neuen Cronjob für die neue Mailbox an<br /> Zudem: immer auf die richtigen Nutzerrechte und Dateizugehörigkeiten achten! Um den korrekten Ablauf zu überwachen könnt Ihr Euch die Logdatei ansehen: <code><pre>tail -f /var/log messages</pre></code> <br /> <br /> <br /> ==SSL/TSL Setup== Nachdem wir nun einen IMAP Server am Laufen haben sollten wir uns Gedanken über den Datenaustausch beim Login machen. Hier werden ja Nutzer und Passwort über das Netz geschickt. In einem lokalen Netzwerk vielleicht jetzt nicht ganz so gefährlich, als wenn wir später das gleiche über einen Webmailer machen. Da sollte der Datenausstausch gesichert über ssl erfolgen. Nun erstellt zwei neue Verzeichnisse, in denen später das Zertifikat abgelegt wird: <code><pre>mkdir /etc/ssl mkdir /etc/ssl/certs mkdir /etc/ssl/private</pre></code> Führt dann das mkcert.sh Skript im '''/opt/etc/dovecot''' Verzeichnis aus um Euer Zertifikat zu erstellen und anzulegen: <code><pre>sh mkcert.sh</pre></code> Editiert '''/opt/etc/dovecot/dovecot.conf''' und Ändert folgende Variablen ab: '''ssl_disable = yes''' in '''ssl_disable = no''' und hier der richtige Pfad zu den Zertifikaten: '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br /> '''ssl_key_file = /etc/ssl/private/dovecote.pem''' Achtet zudem, dass bei den zu startenden Protokollen neben dem imap auch imaps in der dovecot.conf steht. Ergänzt das beim Parameter '''protocols''' gegebenfalls. Dann startet Dovecot neu: <code><pre>/opt/etc/init.d/S90dovecot restart</pre></code> Nun müsst Ihr noch Euren Mail Client für SSL/TSL anpassen. Das geht von Mailer zu Mailer unterschiedlich. Wenn Ihr dann gefragt werdet, ob Ihr ein Zertifikat akzeptieren wollt habt Ihr es geschafft. <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==Dovecot auf der NSLU2 selbst kompilieren== Als ich ein paar Probleme mit dem ssl Handshake hatte und festellte, dass es neueren Dovecot Code gibt, habe ich mich entschlossen, meinen Dovecot von Grund auf selbst zu bauen. Das ist keine wirklich schwere Angelegenheit. Installiert zuerst folgende Pakete: <code><pre>ipkg install optware-devel openssl-dev </pre></code> Erstellt ein Build Verzeichnis: <code><pre>mkdir work</pre></code> Hier ladet dann den Quellcode der aktuellen Version herunter (z.B.) <code><pre>wget http://www.dovecot.org/releases/1.1/dovecot-1.1.4.tar.gz</pre></code> (Schaut im Downloadbereich unter http://www.dovecot.org nach, ob das auch die aktuelle Version ist) Wie gehabt auspacken: <code><pre>tar -zvxf dovecot-1.1.4.tar.gz</pre></code> Wechselt in das neue Verzeichnis dovecot-1.1.4 und bereitet den Kompilierungsvorgang vor: <code><pre>CPPFLAGS=-I/opt/include LDFLAGS=-L/opt/lib ./configure --prefix=/opt --with-ssl=openssl --with-ssldir=/etc/ssl</pre></code> Dann wird übersetzt: <code><pre>make</pre></code> An der Stelle könnt Ihr einen Kaffee trinken gehen. Auf dem 266MHz ARM Prozessor dauert das seine Zeit- Dann installieren wir ganz unkonventionell den dovecot wie ipkg: <code><pre>ipkg install dovecot</pre></code> Das machen wir, damit alle Verzeichnisse und auch das Startscript unter '''/opt/etc/init.d''' angelegt wird. Die alten Files werden dann mit unseren neuen übersetzten überschrieben: <code><pre>make install</pre></code> Danach müssen wir zwei Bibliotheken umlinken, damit die neue Programmversion diese unter '''/lib''' findet: <code><pre>ln -s /opt/lib/libssl.so.0.9.7 /lib/libssl.so.0.9.7 ln -s /opt/lib/libcrypto.so.0.9.7 /lib/libcrypto.so.0.9.7</pre></code> Legt zwei neue Verzeichnisse für die Zertifikate an (falls noch nicht geschehen): <code><pre>mkdir /etc/ssl mkdir /etc/ssl/certs mkdir /etc/ssl/private</pre></code> Sollten hier schon Dovecot Zertifikate der alten Version liegen entfernt die besser erst einmal. In '''/work/dovecot-1.1.4/doc/''' führt dann <code><pre>sh mkcert.sh</pre></code> aus und die Zertifikate werden erstellt. Wir kümmern uns nun um die dovecot.conf Datei. Solltet Ihr bereits schon den Dovecot in der Slug Version am Laufen gehabt haben, dann liegt diese bereits unter '''/opt/etc/dovecot.conf'''. Da sich an manchen Stellen die Notierung geändert hat kopiert diese ersteinmal um ( z.B. dovecotconf.old). Schaut Euch dann die '''/opt/etc/dovecot-example.conf''' an. Dies ist eine Beispielskonfiguration der neuen Dovecot Version. Gleicht diese ersteinmal mit den Einstellungen Eurer alten Konfig ab. Wenn Ihr Dovecot neu installiert habt muss das von Grund auf neu durchgegangen werden. Speichert die fertige Konfiguration dann als '''dovecot.conf''' ab. Die SSL Geschichten müssen dann wie oben bereits besprochen aktiviert werden. Startet dann Dovecot neu: <code><pre>/opt/etc/init.d/S90dovecot restart</pre></code> <br /> <br /> <br /> ==Externer Webmailer== Um einmal von außen auf Eure E-Mails zugreifen zu können empfehle ich den Webmailer Roundcube [http://roundcube.net/]. Roundcube benötigt hierfür einen Webspace mit php und einer mysql Datenbank. Ihr müsst nur ein paar wenige Angaben in den Konfigurationsdateien von Roundcube erledigen, die fast selbsterklärend sind. Etwas kniffeliger wird es beim Anlegen der mysql Tabellen. Das wird über einen mysql Befehl erledigt, den man aber auch über den phpmyadmin absetzen kann, der bei den meisten Hoster denke ich mit angeboten wird. Mittels Roundcube könnt Ihr Euch über das Login in jder Eurer Mailboxen einloggen. Das geschieht über das bekannte Login auf der Slug. Deshalb UNBEDINGT das SSL in der Roundcube Konfiguration aktivieren. Dann wird der Handshake geschützt ausgeführt. Ansonsten bietet Rondcube die entsprechenden Verwaltungsmöglichkeiten der gängigen Webmailer. Es können Absendeadressen angelegt werden, ein eigenes Adressbuch und auch E-Mails verschickt werden. Dazu nutzt Roundcube den Mailer des Servers, auf dem dieser seinen Dienst verrichtet. Konfigurationshilfen und Anleitungen findet Ihr auf der Roundcube Projektseite [http://roundcube.net/]. Diese sind sehr gut und einfach nachzuvollziehen, weshalb ich hier auf eine weitere Dokumentation verzichte. Roundcube Webmailer: [[Bild:slug30.jpg|center]] <br /> <br /> <br /> ==FAQ== '''Q''': Der Webmailer kann sich nicht an die SLUG anbinden. Der IMAP Server liefert mir einen Timeout<br /> '''A''': Du musst den Port 143 (imap) und 993 (imaps) an die IP Deiner NSLU2 weiterleiten. Das geht über Deinen Router. Der hat normalerweise in seiner Konfiguration die Möglichkeit, Ports auf eine IP Adresse im LAN weiter zu leiten. Wie das funktioniert verrät die Betriebsanleitung des jeweiligen Routers. Das ist von Hersteller zu Hersteller und Modell zu Modell durchaus unterschiedlich zu konfigurieren. '''Q''': Wenn ich mir die var/log/messages ansehe, dann bekomme ich die Meldung, dass der getmail Cron eines Users UNSAFE sei. Was hat das zu bedeuten?<br /> '''A''': Da der Cron seitens eines Users passiert ist der Prozess normalerweise sicher, da das nicht über Root passiert. Jedoch kann es sein, dass vergessen wurde, bei der getmail.sh den korrekte Nutzer zu setzten. Prüft das zuerst nach. Falls dass der Fall ist bitte mit einem chown wie oben beschrieben korrigieren. Ich hatte auch den Fall, dass der User gestimmt hat. Kurioserweise war der Fehler damit zu beheben, indem ich einfach den entsprechenden Cronjob mit einem Editor geöffnet habe: '''mcedit /opt/var/cron/crontabs/yourcronjob''' (Midnight Commander muss dafür installiert sein) Danach einfach wieder speichern ohne etwas zu verändern. Dann nur noch den cron Dämon mit '''/opt/etc/init.d/S10cron''' neu starten. Danach sollte der Fehler weg sein. '''Q''': Mein Mailer der SSL verwendet sagt, dass die SLUG ein falsches Zertifikat hat, weil der NSLU2 Hostame von dem im Zertifikat abweicht.<br /> '''A''': Hierzu muss die ssl Konfiguration im Arbeitsverzeichnis geändert werden: '''/work/dovecot-1.0.7/doc/dovecot-openssl.cnf''' . Hier muss ein Parameter (common name) auf die IP Adresse oder dem Domain Namen der NSLU2 geändert werden. Normalerweise sollte wird das wie folgt aussehen: '''CN=192.168....''' (hier Diene IP bitte eintragen). Jetzt die Änderungen speichern und die alten Zertifikate '''/etc/ssl/certs/dovecot.pem''' und '''/etc/ssl/private/dovecot.pem''' löschen. Dann nocheinmal '''mkcert.sh''' im .../dovecot-1.0.7/doc/ Verzeichnis ausführen. Dovecot neu starten : '''/opt/etc/init.d/S90dovecot''' . '''Q''': Windows Mail bricht manchmal mit einem Timeout ab.<br /> '''A''': Wenn manchmal etwas mehr zu synchronisieren ist kann es vorkommen, dass der Client zu lange auf die Beendigung des Vorganges warten muss. Hierzu kann man den Servertimeout in den Konteneinstellungen jedes einzelnen Kontos unter Erweitert verlängern. Stellt das auf 2 Minuten ein, das sollte genügen. '''Q''': Kann es sein, dass meine E-Mails nicht mehr auf Viren untersucht werden?<br /> '''A''': Manche Virenscanner scannen von Haus aus nicht auf gesicherte Verbindung. Wenn also ein SSL Handshake verwendet wird, dann kann es sein, dass der Scanner hier davon ausgeht, dass die Verbindung sicher ist und er hier nichts zu tun hat. Man kann dies in der Konfiguration des Scanners oft verändern und diesen auch gesicherte Verbinden überprüfen lassen. Alternativ kann man aber auch im lokalen Netzwerk seinen Mailer eine ungesicherte Verbindung zulassen, damit der Scanner wieder seine Arbeit erledigen kann. Entscheidet selbst, wie herum Ihr das machen wollt. '''Q''': Wenn ich beim Roundcube Mailer manche Ordner aufrufe benötigt er sehr lange um zu synchronisieren und bleibt hängen.<br /> '''A''': Klickt einfach auf "Refresh/Neu laden" im Browsermenü. Dann sollte es normalerweise gehen. Es kann auch sein, dass Ihr in der Konfiguration des Webmailers das Cashing aktiviert habt. Stellt dieses in der Main-Config auf false. Das behebt so manche Probleme. <br /> <br /> <br /> d2419e91a87cffd1bbbf98778c6d77ba39ea5456 Debian auf der NSLU2 0 49 338 60 2010-09-01T13:29:01Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggy2.png|Debbislug]] <br /> ''Um den Finger gewickelt''</div> Wer glaubt, dass mit dem Unslung das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht. So hat es nicht lange gedauert, bis eine spezielle Version für unsere geliebte Schnecke erhältlich gewesen ist. Nun kann ein Debian Etch auf der Slug installiert werden. Hierzu gibt es zwei Varianten, die erhältlich sind. Zum einen die reine Debian Variante ohne proprietären Treiber für den NSLU2 IXP4xx Netzwerkchip. Hier muss dann ein externer USB Netzwerkadapter verwendet werden. Desweiteren gibt es ein unofficial Pakage mit dem Treibermodul um eben den internen Netzwerkchip in Betrieb nehmen zu können. Aber egal was Ihr verwendet, die Installation sieht bei beiden Varianten gleich aus. Ihr installiert die Debian Firmware und loggt Euch via ssh ein. Dort wartet auch schon der Installer, der Euch durch den zugegeben etwas langwierigen Installationsprozess führt. Ihr werdet dort ein Basissystem installieren. Ebenso legt Ihr dann dort das Root-Passwort fest und erstellt einen ersten User. Bereits hier könnt Ihr schon Pakete für einen Webserver auswählen. Nachdem das System die Installation durchgeführt hat wird die Slug neu booten und ein Debianserver Euch beim nächsten Login begrüßen. Hierbei müsst ihr folgendes beachten: Die Debian Slug hat nachher keinen Webadmin mehr. Ebenso wird kein Samba Server von Haus aus installiert sein. Dieser muss dann neu eingerichtet werden, sollte dieser auf der Debian Slug benötigt werden. Erwartet zudem keine Geschwindigkeitsrekorde. Die Debianinstallation sollte von daher nur für eine Aufgabe verwendet werden (Firewall, FTP, Downloadbüchse etc.), denn die 32 MB Ram werden von Haus aus nur noch 10 bis 11 MB freien Speicher zur Verfügung stellen, wenn einmal das Basissystem gebootet hat. Versteht die Debian Installation als Bastelgerät mit dem Ihr einfach Spaß haben wollt. ==Vorbereitung== Bevor Ihr allerdings mit der Installation loslegt solltet Ihr auf alle Fälle Eure Slug richtig im Webadmin konfiguriert haben. Die gewünschte IP Adresse und der Gateway muss eingetragen sein. Diese Werte übernimmt der Debianinstaller entsprechend. Ladet nun die gewünschte Debianfirmware herunter: '''Debian (free), di-nslu2.bin''' [http://ftp.de.debian.org/debian/dist...xp4xx/netboot/] '''Debian (mit IXP4xx Netzwerkmodule für die Slug)''' [http://www.slug-firmware.net/d-dls.php] Flashen der Firmware: ==='''Möglichkeit A)'''=== Hier könnt Ihr die '''di-nslu2.bin''' über den Webadmin hochladen. Gebt dazu den genauen Speicherplatz des Images an: [[Bild:debian_slug01.png]] Nächstes erhaltet Ihr die obligatorische Sicherheitsabfrage: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:debian_slug02.png.png]]</div> Danach kann es eine kurze Weile dauern, bis das Eeprom geflasht wird. Ihr erkennt das an der Slug, dass nun das Power-LED Rot / Grün blinkt. Unterbrecht diesen Vorgang auf keinen Fall. Ein vorzeitiges Abbrechen kann die NSLU2 erstmal für Euch unerreichbar machen. Zudem kann es leider vorkommen, dass das Update mit einem Fehler abbricht (bad file Format). Versucht es dann eventuell mit einem anderen Browser. Sollte auch das nicht fruchten, so fahrt spätestens dann mit der Variante B fort: ==='''Möglichkeit B)'''=== Das meine ich ist der etwas einfachere Weg und geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> '' (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2)'' Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet. Jetzt sind wir soweit und können mit der Installation loslegen: ==Debian installieren== Steckt an den ersten Port Eure USB Platte an und startet die Kiste neu, damit sicher gestellt ist, dass die Platte einsatzbereit ist. Danach verbindet Ihr Euch über ssh mit der Slug: <code><pre>ssh installer@xxx.xxx.xxx.xxx (IP der Slug)</pre></code> Das Passwort lautet '''install''' . Ihr solltet nun folgende Anzeige bekommen: [[Bild:debian_slug03.png]] Hier wählt Ihr dann "'''Start Menu'''" aus. Im nächsten Menü dann die korrekte Ländereinstellung: [[Bild:debian_slug04.png]] Wählt dann einen Spiegelserver aus, von dem weitere Installationspakete nachgeladen werden sollen: [[Bild:debian_slug05.png]] Einen Proxy brauchen wir nicht zwingend auswählen, außer Ihr verwendet einen: [[Bild:debian_slug06.png]] Falls nicht, lasst das Eingabefeld leer und fahrt mit '''continue''' fort. Nun bekommt Ihr ein Auswahlmenü für diverse Module, die geladen werden können: [[Bild:debian_slug07.png]] Notwendig für die Installation auf eine USB Platte sind folgende Module: * partman-auto: Automatically partition storage devices (partman) * partman-ext3: Add to partman support for ext3 * usb-storage-modules-2.6.18-5-ixp4xx-di: USB storage support Hierbei wird dafür gesorgt, dass das ext3 Format verwendet wird. Ebenso das Modul für die USB Festplatte und der Partman zur Partitionierung der Platte. Jetzt werden einige zusätzliche Komponenten geladen: [[Bild:debian_slug08.png]] Danach wird das Partitionierungsprogramm gestartet: [[Bild:debian_slug09.png]] An der Stelle könnt Ihr die Vorgabe des Systems verwenden (guided) oder auch per Hand (manual) einstellen: [[Bild:debian_slug10.png]] Da wir die komplette Platte für unser Slug verwenden wollen können wir ruhig den guided Modus verwenden. Wählt dazu Eure Festplatte aus, die an der Stelle angezeigt werden sollte: [[Bild:debian_slug11.png]] Im nächsten Menü können verschiedene Vorgaben ausgewählt werden. Man kann durchaus die komplette Platte für root verwenden, sofern eh nichts anderes mit der Platte passiert. Anderweitig empfiehlt es sich auch eine getrennte /home Partition einzurichten: [[Bild:debian_slug12.png]] Übernehmt dann die Einstellung mit "'''Finish partitioning and write changes to disk'''" [[Bild:debian_slug13.png]] Eine letzte Sicherheitsabfrage, die Ihr mit "'''yes'''" beantworten könnt: [[Bild:debian_slug14.png]] Die Platte wird dann formatiert (spätestens hier sind alle Daten, die vorher auf dieser Platte waren futsch): [[Bild:debian_slug15.png]] Als nächstes stellt die korrekte Sprache ein: [[Bild:debian_slug16.png]] Die Systemzeit wird eingestellt: [[Bild:debian_slug17.png]] Danach legt Euer Root-Passwort fest: [[Bild:debian_slug18.png]] Das muss noch einmal bestätigt werden: [[Bild:debian_slug19.png]] Jetzt legt Ihr einen ersten Benutzer an: [[Bild:debian_slug20.png]] Der Username für den Account: [[Bild:debian_slug21.png]] Das Passwort: [[Bild:debian_slug22.png]] Und auch nochmal zu bestätigen: [[Bild:debian_slug23.png]] Das Basissystem wird danach installiert, was durchaus einwenig dauern kann: [[Bild:debian_slug24.png]] Der Tasksel zur Auswahl der zu installierenden Software wird gestartet: [[Bild:debian_slug25.png]] Bei der nächsten Abfrage entscheidet Ihr, ob Ihr an der statistischen Erfassung bezüglich der Verwendung der Programmpakete teilnehmen wollt: [[Bild:debian_slug26.png]] Ich empfehle hier erstmal nur das '''Standard System''' zu installieren. Was wir später benötigen können wir immer noch installieren. Zuerst sollten wir nicht zu viel Zeit mit langwierigen Installationsprozessen von Programmen verschwenden, die wir dann schlußendlich doch nicht benötigen. Also lassen wir nur den Menüpunkt "'''Standard System'''" aktiviert und gehen auf '''Continue''': [[Bild:debian_slug27.png]] Jetzt werden die Programme über das Netz nachgezogen. Das kann auch einwenig Zeit in Anspruch nehmen. Gönnt Euch hier zwischenzeitlich ruhig einen Tee und vielleicht eine netten Film auf DVD ;-) [[Bild:debian_slug28.png]] Wenn das geschafft ist, wird das System zum Reboot vorbereitet: [[Bild:debian_slug29.png]] Das finale Bild: [[Bild:debian_slug30.png]] Startet das System dann mit "'''continue'''" neu durch. Der Bootvorgang dauert einwenig, aber wenn Ihr die Slug 3x piepsen hört könnt Ihr Euch nun via ssh auf Euren Server einloggen. Der Zugang geht dann entweder über "root" mit Eurem festgelegten Passwort oder mittels Eurem ersten Standard- User. Glückwunsch! Ihr habt jetzt ein waschechtes Debian auf der Slug laufen! Von hier aus könnt Ihr als erfahrene Linux Administratoren dann schalten und walten was unsere liebe Schnecke so hergibt. 7ed91c6c283b6a88315a6bb2c9cbc7eab8448d70 Fragen zur Slug 0 20 339 27 2010-09-01T13:29:33Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Werden beim Flashen alle Settings gelöscht?== Nein, interne Einstellungen wie die IP Adresse, Name der Slug, Gateway werden beibehalten. <br /> <br /> ==Muss ich neu flashen, wenn ich die Slug neu einrichten will?== Nein, das ist nicht zwingend notwendig. Sollte man eventuell das Gerät so verkonfiguriert haben, dass man es neu aufsetzen möchte, dann genügt es, die Platte zu löschen und neu zu formatieren. Danach kann man das System wie gewohnt unslingen. <br /> <br /> ==Was passiert beim erneuten Unslingen?== Die Slug erkennt, wenn bereits geunslingt wurde. Auch hier funktioniert nicht das ursprüngliche uNSLUng Passwort, sondern Euer bereits gesetztes, obwohl keine Daten mehr auf der Platte zu finden sind. Beim erneuten Unslingen entfernt der Prozess ersteinmal einen Flag und fordert den User zum Neustart auf. Danach noch einmal den Unslingvorgang ausführen. Danach ist das System wieder geunslingt und Ihr könnt die Slug weiter konfigurieren. <br /> <br /> ==Warum findet ipkg update nichts und ich kann via ipkg nichts installieren?== Bitte tragt auf jeden Fall im Webadminbereichbereich einen Nameserver ein. Die Eingabemöglichkeit eines primären Nameservers findet Ihr unter Administration -> LAN. <br /> <br /> 0abe49ad2863e0ff6d8897f0f2df403f0ebf2e4f Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 340 304 2010-09-01T13:30:31Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|Schema]] <br> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 98de4c4f0f4853813e2c6cdc79440bc48fd6a347 Ioquake3 Server und Build Service 0 105 341 300 2010-09-01T13:31:04Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer 98f0a83fff9429936888cc74e7549d640de91990 347 341 2010-09-18T17:05:27Z Admin 1 /* Windows Client via mingw Crosscompiler */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer 3af99214f9dd1263294891d4d11e89256a5423f1 348 347 2010-09-18T17:06:00Z Admin 1 /* Crosscompiler auf openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer b2155bf980fbc765028ed4ad21d2fb7f0a6f390f 349 348 2010-09-18T17:07:43Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essentials</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer 8408901106326941d1da36e7d36acad515a5832a 350 349 2011-02-05T18:14:56Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer 54dc0026fa9f8967664fd4e8d476de50d0f36248 355 350 2011-11-06T17:46:33Z Admin 1 /* Windows Client via mingw Crosscompiler */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer 5049f5cafde4efdbd338e4bcd6cdac2479e98dd5 356 355 2011-11-06T17:48:44Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer cc11270ae60f276a992916cffbd630f6bc0ab558 F.E.A.R. Dedicated Server auf Linux 0 112 342 305 2010-09-01T13:31:25Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Der mittlerweile etwas betagte Gruselshooter F.E.A.R. aus dem Hause Sierra hat ein gutes Multiplayermodul, das sich auch heute nach ca. 3 Jahren nach Erscheinen der letzten Version 1.08 großer Beliebtheit erfreut. Zumal das Multiplayermodul F.E.A.R. Combat kostenlos downloadbar ist und somit der Multiplayer Part frei gespielt werden kann. <br><br> Die Installation auf einem Linux Server ist relativ einfach. Die Prozedur auf einem Debian Server (getestet auf meinem intel Atom 270 Server mit einem 64bit Debian 5 , Lenny) ist schnell erledigt. <br><br> Legt einen eigenen User für das Spiel an, da wir den dedicated Server nicht als root laufen lassen wollen. Falls Ihr noch einen anlegen müsst, dann macht das an der Konsole als root <code><pre>adduser meinfear</pre></code> Damit haben wir den User '''meinfear''' generiert und dieser hat sein Homeverzeichnis '''meinfear''' nun unter '''/home'''. <br><br> Jetzt benötigen wir ein paar Pakete, die wir wie folgt installieren können: <code><pre>apt-get install libstdc++5 screen</pre></code> Wenn Ihr ein 64bit System verwendet, dann muss ein Paket mehr rein: <code><pre>apt-get install libstdc++5 ia32-libs screen</pre></code> Nachdem die Pakete im System sind werden wir nun den FEAR Server installieren. Das machen wir als normaler User. Wenn Ihr noch root seid, dann wechselt nun die Userid mit einem: <code><pre>su meinfear</pre></code> und wechselt in sein Homeverzeichnis: <code><pre>cd /home/meinfear</pre></code> Nun können wir den Server herunterladen: <code><pre>wget http://www.1337-server.net/fear/fear-linuxserver-1.08.tar.gz</pre></code> Die Datei entpacken wir: <code><pre>tar -zxvf fear-linuxserver-1.08.tar.gz</pre></code> Nun haben befindet sich in Eurem Homeverzeichnis das neue Verzeichnis '''FEAR'''. Wir wechseln nun dort hin: <code><pre>cd FEAR</pre></code> und können auch schon den Server starten: <code><pre>./start.sh</pre></code> Wenn alles glatt läuft solltet Ihr diese Ausgabe sehen: <code><pre> F.E.A.R. Dedicated Linux Server - Version FEAR v1.08 Copyright (c) 2005 Monolith Productions, Inc. All rights reserved. Initializing... Map Rotation: Asylum Cafeteria Campus Construction Docks Evac Factory HighTech Office Refinery Stockpile WaterWorks Loading world: Worlds\ReleaseMultiplayer\Asylum World loaded. Ready.</pre></code> ==ServerOptions== Der Server läuft nun auf dem Standardport '''27888'''. <br> Wenn Ihr den Gamemode ändern wollt oder auch den Port, dann müsst Ihr das in der Datei '''/FEAR/ServerOptions/ServerOptions.txt '''erledigen. <br><br> Wichtig ist zunächst Folgendes in dieser Datei. <br><br> Sektion '''[ServerSettings]''': <br><br> GameType=DeathMatch ''Legt den Gametype fest (siehe darunterliegende Sektionen)''<br> ServerMessage= ''Eine Meldung, die der Server ausgibt beim Connecten''<br> UsePassword=0 ''0=kein Passwort 1=Passwortgeschützt''<br> Password=password ''Serverpasswort''<br> AllowScmdCommands=0 ''Schaltet Adminkommandos ein''<br> ScmdPassword=password ''Admin Passwort''<br> Port=27888 ''Standardport''<br> ...<br> Dedicated=1 ''0=kein dedicated Server 1= Dedicated Server''<br> ...<br> AllowVoteKick=1 ''Diverse Votingsettings''<br> AllowVoteTeamKick=1<br> AllowVoteBan=1<br> AllowVoteNextRound=1<br> AllowVoteNextMap=1<br> AllowVoteSelectMap=1<br> MinPlayersForVote=5<br> MinPlayersForTeamVote=3<br> VoteLifetime=30<br> VoteBanDuration=60<br> UsePunkBuster=0 ''Punkbuster ja oder nein. 0=nein 1=ja''<br> <br> Die darunterliegenden Sektions nehmen Einstellungen für die einzelnen Spielearten fest, welchen Ihr oben unter GameType festlegt. Ihr solltet auf alle Fälle im jeweiligen Spieletyp Euren Servernamen festlegen, damit dieser im Ingamebrowser später auch eindeutig gefunden werden kann. Den Namen legt Ihr beim Parameter <br><br> '''SessionName='''<br> <br> fest. Wie schon gesagt, den könnt Ihr für jede Spieleart anders nennen, da dieser in jeder einzelnen Sektion festgelegt werden kann. <br><br> ==Speicherzugriffsfehler== Beim Installieren auf meinen Server begrüßte mich der Server zunächst beim Start mit einem Speicherzugriffsfehler (Segmentation fault) und brach ab. Ich dachte zuerst an ein Problem mit der Architektur. Allerdings lag das in meinem Fall an der eingeschalteten Firewall. Wenn Ihr iptables am Laufen habt, dann müssen folgende Ports jeweils UDP und TCP freigeschaltet werden '''27888''' (je nachdem wie Ihr Euren Standardport setzt) und den Port '''27900 '''damit Euer Server gelistet wird. Tragt diese Ports im IN und OUT Eures Scripts ein. Danach sollte der Server starten. <br><br> ==Screen== Wenn Ihr den Server an der Konsole via ssh oder ähnlich startet, dann startet zuerst screen und dann den Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> ==Mehrere Server parallel== Wenn Ihr auf Euren Server mehrere Gamemodi beispielsweise laufen lassen wollt (der Slowmo Deathmatch ist recht schön), dann legt eine weitere ServerOptions Datei an: <code><pre>su meinfear cd /home/meinfear/FEAR/ServerOptions cp ServerOptions.txt ServerOptions2.txt</pre></code> Editiert nun die '''ServerOptions2.txt''' und legt einen neuen Standardport fest (z.B. 27889) und tragt den neuen gewünschten GameType ein. Speichert die Änderung. <code><pre>cd /home/meinfear/FEAR cp start.sh start2.sh</pre></code> Damit haben wir eine zweite Startdatei angelegt. Editiert auch diese und ändert die Zeile <code><pre>./fearserver.bin</pre></code> in <code><pre>./fearserver.bin -optionsfile ServerOptions2.txt</pre></code> Nun startet screen und den ersten Server: <code><pre>su meinfear cd /home/meinfear/FEAR screen ./start.sh</pre></code> Die zweite Screensession machen wir mit einer Tastenkombination auf:<br><br> '''STRG+a c'''<br><br> Dort starten wir nun den Server: <code><pre>./start2.sh</pre></code> ==Kurzer Exkurs zu Screen== Screen verlassen, läuft im Hintergrund weiter: Konsole zumachen, oder an der Konsole '''STRG+a d'''<br><br> '''exit''' beendet eine Konsole, bei der letzten Konsole beendet sich screen<br><br> '''screen -R''' startet die laufenden Screensessions.<br><br> '''STRG+a leer''' Schaltet zwischen den einzelnen Screensessions um. <br><br> ==Checkupscript für zwei laufende Server== Die Idee bei folgendem Script ist, dass es über einen Crontab-Eintrag in kurzen regelmäßigen Abständen prüft, ob der F.E.A.R. Server läuft. Ist dies der Fall, dann überprüft das Script, ob der Server eventuell am Überlaufen ist. D.h. ist die CPU Last über einen speziell festgelegten Schwellenwert, dann werden die Prozesse gekillt und der Server neu gestartet. Ich habe das einwenig ausgebaut, und hierbei zwei parallel laufende F.E.A.R. Server in die Überwachung genommen. Da das Skript E-Mails versendet muss ein MTA wie der Exim4 konfiguriert sein. <br><br> '''Vorbereitung für zwei Server:'''<br> Die zwei Server werden über ein eigenes Startskript aufgerufen. Zudem kopieren wir die Server Binary auf einen eienen Namen, damit der Prozess später anhand seines Namens gefunden und zur Not beendet werden kann. <br><br> Ich gehe davon aus, dass der User, '''meinfear''' heißt. Sein Verzeichnis liegt unter '''/home/meinfear'''. Das Fear Verzeichnis lautet '''FEAR'''. Das Script müsst Ihr dann entsprechend an Eure Gegebenheiten anpassen. <br><br> Die Startdatei kopieren wir wie folgt: <code><pre>cp start.sh start2.sh</pre></code> Die Binary: <code><pre>cp fearserver.bin fearserver2.bin</pre></code> In der Startdatei (start.sh und start2.sh) ändert den Inhalt etwas ab. Zum einen muss in Euer Homeverzeichnis gewechselt werden: <br><br> '''cd /home/meinfear/FEAR''' <br><br> Danach noch hinter den '''./fearserver.bin''' die Ergänzung '''-optionsfile''' mit dem ABSOLUTEN Pfad zu Eurer Serverkonfigurationsdatei. Z.B.: <br><br> '''./fearserver.bin -optionsfile /home/meinfear/FEAR/ServerOptions/ServerOptions.txt''' <br><br> Speichert die Änderungen entsprechend ab. Dann legt im Verzeichnis '''/usr/local/bin''' die Datei wie folgt an: feartest <code><pre>#!/bin/sh # F.E.A.R. Dedicated Checkup Script by Pierre "Gargi" Kretschmer top -b -n 1 | grep fearserver.bin server1=$? top -b -n 1 | grep fearserver2.bin server2=$? if [ \( $server1 = 1 \) -o \( $server2 = 1 \) ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "No active F.E.A.R. Server found. Starting new Killerspiele sessions!" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server start" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else fear1load=$(top -b -n 1 | grep fearserver.bin | cut -d " " -f20) fear2load=$(top -b -n 1 | grep fearserver2.bin | cut -d " " -f20) if [ $fear1load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/fear/meinFEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 elif [ $fear2load -gt 30 ]; then pkill -u meinfear killall -s7 fearserver.bin killall -s7 fearserver2.bin su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh' su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh' rm /var/log/fearcheck.log echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH meine @ emailadresse.de < /var/log/fearcheck.log exit 1 else rm /var/log/fearcheck.log echo "server load ok" > /var/log/fearcheck.log fi fi </pre></code> ''(Bitte beachtet, dass bei dem Hinweis //ZEILENUMBRUCH im Skript, die markierten Zeilen in eine Zeile geschrieben werden müssen, sonst ist das Skript nicht funktionsfähig!)'' <br><br> Zu Beginn prüft das Script also, ob beide Server aktiv sind. Sind es diese nicht, oder fehlt einer der beiden Server, dann werden alle Prozesse aus dem Bereich "gekillt" und der Server neu gestartet. Fehlt wieder ein Server, wird dies beim nächsten Test wieder ausgelöst, bis alle beiden Server aktiv sind. Sind beide Server vorhanden, dann wird getestet, ob die Auslastung der einzelnen Server über 30% liegt. Sollte das der Fall sein, werden auch hier alle Prozesse getötet und die beiden Server neu gestartet. Auch hier gibt es dann eine E-Mail als Benachrichtigung. Sollte der Load unter 30 % liegen, dann passiert gar nichts und der Check kommt dann zum nächsten Lauf wieder. Man kann dieses Script dann über die Crontab ('''crontab -e''') beispielsweise alle 2 Minuten aufrufen: <code><pre>*/2 * * * * /usr/local/bin/feartest > /dev/null</pre></code> Vergesst nicht, das Skript ausführbar zu machen: <code><pre>chmod +x /bin/feartest</pre></code> Das Skript startet zwei eigene Screen Sessions für den gleichen User. Um die Screensession aufzurufen, macht das als eingeloggter User mit einem <code><pre>screen -r server1</pre></code> oder <code><pre>screen -r server2</pre></code> Ihr könnt dann auch im Script die Bezeichnung der Sessions individuell ändern. Dies findet über dem screen Parameter -'''S''' statt. <br><br> Den Schwellenwert von den voreingestellten 30 % könnt Ihr wenn Ihr wollt auch individuell ändern. Diesen findet Ihr im if Bereich hinter dem Prüfwert '''-gt'''. Wenn ein Server generell höhere Last hat, dann kann man die auch mit entsprechend unterschiedlichen Werten versehen. 6709cd7555ed5f30506280b5904791f3f69f26f8 Openwrt auf wrt54GL 0 113 343 131 2010-09-01T13:31:44Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wer ein wenig bastelfreudig ist, der kann seinen Linksys WRT54GL Router gänzlich umfunktionieren. Hierzu hat sich um die [http://www.openwrt.org/ OPENWRT Firmware] eine recht große Community entwickelt und es finden sich ein Vielzahl an Programmen, die für OpenWRT kompiliert sind. So kann man seinen Linksys Router z.B. mit der mächtigen [http://www.shorewall.net/ Shoreline Firewall (Shorewall)] bestücken, und die Kiste zum Wachhund im Netzwerk umkonzipieren. Freaks basteln sogar noch eine Flashcard in die Kiste, um noch mehr Funktionen wie einen ftp oder Webserver zu integrieren. Aber eines vorweg: '''Mit der OpenWRT Firmware ist die Maschine nicht mehr über einen Webadmin konfigurierbar'''. D.h. es ist auch nicht mehr so leicht, die Originalfirmware aufzuspielen. Wie man das zur Not wieder macht, erkläre ich im weiteren Verlauf dieses Tutorials, es ist aber dazu ein installiertes Linux notwendig (oder eventuell ein Livesystem wie [http://www.knopper.net/ Knoppix]). Dieses Tutorial beschränkt sich zuerst auf die pure Installation der Firmware (aktuelle Version: '''KAMIKAZE'''... keine Sorge: Nomen ist nicht Omen und was das bedeutet seht Ihr nachher dann, wenn Ihr Euch das erste Mal auf der OpenWRT OS einloggt ). Weitere Tutorials folgen (sofern ich immer mal einwenig Zeit dazu finde). <br /> <br /> ==Where to get== Zuerst die [http://www.openwrt.org/ OpenWRT] Firmware herunterladen: [http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/ http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/] Aktuelles bin: '''openwrt-wrt54g-2.4-squashfs.bin''' Die Kernel Version 2.4 unterstützt zudem den Wireless Lan Chip. Wer diesen nicht benötigt, kann die Kernelversion 2.6 verwenden. <br /> <br /> ==Den WRT54GL flashen== ===Methode1=== Über das Webadmin die Software hochladen. Kiste startet dann von selbst neu. <div style="text-align:center">''Flashen über den Webadmin'' <br /> [[Bild:openwrt01.jpg|center]] </div> <br /><br /> <div style="text-align:center"> [[Bild:openwrt02.jpg|center]] ''So denn alles geglückt ist''</div> <br /> <br /> ===Methode2=== Unter Linux '''tftp''' installieren. Danach die Rechner IP auf 192.168.1.2 einstellen, den Router nicht an den Strom anschließen und über den Port LAN1 mit dem Rechner über ein Netzwerkkabel direkt verbinden (NICHT ÜBER EINEN ANDEREN ROUTER !!!!). Wechselt in der Konsole Eures Linuxrechners in das Verzeichnis, in dem die Firmware liegt. Dort gebt Ihr dann folgenden Befehl ein: <code><pre>tftp 192.168.1.1</pre></code> Es erscheint ein neues Prompt: '''tftp>''' Hier der Reihe nach folgende Befehle eingeben: <code><pre>binary trace put openwrt-wrt54g-2.4-squashfs.bin</pre></code> Jetzt EL PRONTO den Stromstecker in den Router stecken und die Firmware wird selbstständig in den Speicher geschossen. Wartet ab, bis der Router von selbst neu startet. Danach ist das Update abgeschlossen. '''Hinweis: Auf die Art und Weise könnt Ihr auch wieder die ursprüngliche Linksys Firm, oder eine andere für den Router passende zurückflashen.''' <br /> <br /> ==Erste Konfiguration== Via telnet hängt Ihr Euch an den Router nun ran: <code><pre>telnet 192.168.1.1</pre></code> In dem Zustand ist noch KEIN Passwort gesetzt. Ihr erhaltet nun folgendes Bild: [[Bild:openwrt03.png|center]] Als nächstes gebt folgende drei Befehle ein: <code><pre>nvram set boot_wait=on nvram set boot_time=10 nvram commit && reboot</pre></code> Die Kiste startet neu. Passt jetzt erstmal die IP der Maschine an, wenn diese nicht auf 192.168.1.1 weiterhin bleiben soll: <code><pre>vi /etc/config/network</pre></code> Im Bereich <code><pre>#### LAN configuration config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0</pre></code> ändert Ihr die IP bei option ipaddr auf die gewünschte IP ab. Um etwas zu ändern müsst Ihr im vi den Editmodus aktivieren. Dazu die Taste "'''i'''" drücken. Wenn fertig, drückt die '''ESC''' Taste. Dann zum Speichern der Änderung ''':w''' eingeben ( Doppelpunkt und kleines W ). Zum Beenden dann ''':q''' Startet nun den Router neu: <code><pre>reboot</pre></code> Nun müsst Ihr gegebenenfalls Eure Netzwerkadresse Eures Rechners wieder anpassen, wenn die IP nicht in der gleichen IP-Range gelegen ist. Dann hängt Euch wieder via Telnet ran (mit der neuen IP Adresse natürlich). Jetzt sollten wir ein Root-Passwort vergeben. Dazu <code><pre>passwd</pre></code> eingeben und dann das gewünschte Passwort, wenn abgefragt. Ab hier könnt Ihr Euch via '''ssh''' einloggen! Nun beendet die Sitzung mit <code><pre>exit</pre></code> und loggt euch jetzt via '''ssh''' als root ein (mit neuen Passwort). Damit ist erst einmal die neue Firmware drauf und Ihr könnt mit der weiteren Konfiguration beginnen. 300c47a4d4d1181a85d547b41a6812c94475b9a2 Impressum 0 5 357 10 2012-09-02T11:40:57Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge zu editieren, zu löschen oder zu blockieren. Beleidigende, rechtsverletzende oder nicht namentlich gekennzeichnete Kommentare (auch solche mit gefälschten Daten) werden gelöscht oder zum Zwecke der Strafverfolgung gesichert.Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden 325dc46026781a7d58dd48783d3cbbf4409bd969 Datei:Impressum.jpg 6 140 358 2012-09-02T11:41:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 DOOM auf Linux 0 141 360 2012-10-03T10:13:11Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext e24577b2f8a7c3b2839b19aa14b69f9dfcd8d858 Datei:Doom.jpg 6 142 361 2012-10-03T10:13:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 DOOM auf Linux 0 141 362 360 2012-10-03T10:47:24Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. e879b13cf6e5ec7db44e47ef2c8552d1087fdc9c 363 362 2012-10-03T10:53:06Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems<br> - Installation von Fmod Ex (für die Sound / Midi Wiedergabe)<br> - Aktuellen Quellcode über SVN ziehen<br> - Compile der gzdoom Binaries<br> - Installation der gm.dls für die Midi Wiedergabe<br> - Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== 171131da56981923b6f76999d21179566c8ca8f7 364 363 2012-10-03T10:55:03Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== e212ec1e673ad7c6e8729578cd70a4553cbf2cab 365 364 2012-10-03T10:58:25Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen isntalliert sein (via Yast oder zypper): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. 9a6d3cfcbce6165ca2e8e1a4e9f960ace1df271e 366 365 2012-10-03T10:58:49Z Admin 1 /* Voraussetzung */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. 365738c0a253ae5c8ec92ebe9a112f8eb483e726 367 366 2012-10-03T11:03:37Z Admin 1 /* FMOD installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. dc5e99968b163423b0b9b32e2eb4b83439b44ec3 368 367 2012-10-03T11:03:58Z Admin 1 /* Voraussetzung */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. 09950286f299263f2e230d6297940e4772175164 369 368 2012-10-03T11:04:20Z Admin 1 /* FMOD installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> fef245a0d178983321753b99f815fcce6abe5524 370 369 2012-10-03T11:05:58Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' [(http://www.opensuse.org)] zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> a9730517e014eb3f90136354674f5416fa18d181 371 370 2012-10-03T11:06:43Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> 3ea6399c80236404d482031b9e0c55ea6ae2eabd 372 371 2012-10-03T11:16:08Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== <br> <br> Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> ***Patchvorgang für FMOD / Prologic*** Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> 9456cc9e9ca40180f99073f911c7feec59d5983d 373 372 2012-10-03T11:18:21Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== <br> <br> Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> 14956790e7c3d9e65dc670d8158bf9f07327697c 374 373 2012-10-03T11:18:52Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== <br> <br> Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> bdbede42c3d72bda7e38d5ba1ee60f8f6cb845d5 375 374 2012-10-03T11:21:07Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== <br> <br> Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake'''<br> <br> ==FMOD installieren== <br> <br> Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== <br> <br> Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== <br> <br> Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. a152eb9108e8d26a73bf40001004920613589532 376 375 2012-10-03T11:39:03Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.jpg|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.jpg|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html '''id Software:''' http://www.idsoftware.com/ '''FMOD:''' http://www.fmod.org '''Timidity:''' http://timidity.sourceforge.net/ '''openSUSE:''' http://www.opensuse.org '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 97457376d32b67fedee75f9fd3d10ce39496db3a 383 376 2012-10-03T11:41:57Z Admin 1 /* Stuttering Problem bei aktivierten Compositing Effekten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html '''id Software:''' http://www.idsoftware.com/ '''FMOD:''' http://www.fmod.org '''Timidity:''' http://timidity.sourceforge.net/ '''openSUSE:''' http://www.opensuse.org '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> c16eb4afb64f06c374ad4d4e56f7c7edb11b716f 386 383 2012-10-03T11:43:14Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 9290ac8a0050f8737f878aa23dd8905d63122eaf 387 386 2012-10-03T11:43:46Z Admin 1 /* Stuttering Problem bei aktivierten Compositing Effekten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die doom.wad von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> d5aea22059febc2af613c315721745d3c03d70fc 388 387 2012-10-03T11:51:33Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach langem von dem deutschen Index der jugendgefährdenden Medien gekommen ist, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu reden, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> bd942b67491eca2cd75912a9f1e2ce35ba94cf25 389 388 2012-10-03T11:53:14Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 9406a67477eff67b726d2c1aa84c89d5016efe05 390 389 2012-10-03T11:57:50Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: </div><noinclude> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|logo]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 63fe743d697b4982fd35d32c90c30fd538573a59 391 390 2012-10-03T11:58:33Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> b8a5695e6c3d99c3b1bd45e81084f4dd33d2472e 392 391 2012-10-03T11:59:30Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 5f56b14a5c2f62d8c4656867670db067048aa4a1 394 392 2012-10-03T12:00:42Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 9406a67477eff67b726d2c1aa84c89d5016efe05 395 394 2012-10-03T12:01:15Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 1c07fca589ee26171b41450223023390db3a7565 396 395 2012-10-03T12:02:27Z Admin 1 /* Stuttering Problem bei aktivierten Compositing Effekten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> 35da1cb7a36560b685fbadb46c9c929ab0c18c39 397 396 2012-10-03T12:02:38Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2 <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> aa61cd422e2b416c69dba60464f789d51fea39f1 398 397 2012-10-03T12:09:20Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> b2c9234fd17cc282cb660c20565a441aabd4d57c 400 398 2012-10-03T12:27:02Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> </pre></code> <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Spec für gzdoom''' </pre></code>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> 3f525e73e5914d655602dc8254c59a374d6ad47e 401 400 2012-10-03T12:28:35Z Admin 1 /* SPEC Files */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> 758aabbb215ad6b13eaad0f74e5cdff2eca8bce1 402 401 2012-10-03T12:29:07Z Admin 1 /* SPEC Files */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom, jdoom und gzdoom (die openGL Version des zdoom) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> 68eb3a50fd61cc6e89f1c21db077dc6066c0757e 403 402 2012-10-03T12:34:02Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom (http://prboom.sourceforge.net), jdoom / Doomsday (http://dengine.net) und gzdoom (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> ac8b6fa89d7208c32fd9159c7cf96f4902dc7a31 404 403 2012-10-03T12:35:44Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> b0152d388379379e3c126867f972e4bf2bddbc9e 405 404 2012-10-03T13:13:05Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> [[Bild:settings5.jpg|Settings 5]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> 7ffaaa3324ccdf170232c842318f8918aa59d1d7 407 405 2012-10-22T05:26:03Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> cda58084911c78f13b1bdbc844524821bdf1bbbb Datei:Doom fullhd kl.jpg 6 143 377 2012-10-03T11:39:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Settings1.jpg 6 144 378 2012-10-03T11:39:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Settings2.jpg 6 145 379 2012-10-03T11:40:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Settings3.jpg 6 146 380 2012-10-03T11:40:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Settings4.jpg 6 147 381 2012-10-03T11:40:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Settings5.jpg 6 148 382 2012-10-03T11:41:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Compositing1.png 6 149 384 2012-10-03T11:42:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Compositing2.png 6 150 385 2012-10-03T11:42:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:E1M1.jpg 6 151 393 2012-10-03T11:59:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Hauptseite 0 1 399 330 2012-10-03T12:13:01Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ f744f164104c656d089d4a9733ce4ea3b7778153 Datei:Doom1.jpg 6 152 406 2012-10-03T13:13:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Sidebar 8 3 408 359 2012-10-22T05:29:30Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian 6 installieren|Debian 6 installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 5db62a6be07e77df00c4ee89a843be05c8a6fad8 409 408 2012-10-22T05:30:36Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 auf der NSLU2|Debian 6 auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 2f9177c7a2c476afa42459bae96472b997c1b9e5 Debian 6 auf der NSLU2 0 153 410 2012-10-22T05:37:08Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht. 656fcd8194585fd5b7737c5e2281edb739bb4aba Datei:Schnegge2 nslu2.png 6 154 411 2012-10-22T05:37:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian 6 auf der NSLU2 0 153 412 410 2012-10-22T05:44:27Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> cab2810f20c8ddae6348bf9fa4970d63d8e7db48 413 412 2012-10-22T05:47:01Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> 3c594f2c720582ae13e15ea2312656f2fd2af6d3 414 413 2012-10-22T05:50:41Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU" wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit.<br/><br/> 168b230c572fd115553d0e6a9fe66e012e994fdc 415 414 2012-10-22T05:51:07Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit.<br/><br/> a2a1af7969b69b6b7cdac845f434ca19adf69081 416 415 2012-10-22T05:51:31Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> 1d5a59ea9c53dcc310967ed9af92a9fe22e3334d 417 416 2012-10-22T17:01:17Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> 1GB für Swap (Auslagerungspartition)<br/> 20GB für /<br/> ~40GB (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein n für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein p für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die 1 für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <ode><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code><br/> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> 80d37242796d1466245d86ddc31b7e77b4fa08f0 418 417 2012-10-22T17:03:58Z Admin 1 /* Stick/HDD erstellen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> 7ba67e3ec630e9021371f95d17926d8e8177375a 419 418 2012-10-22T17:08:52Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: 57f58a355fdfb9f81ad0a1992507a70deb0a2f25 421 419 2012-10-22T17:13:30Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /> 192.168.0.xxx <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> [PASSWORT EINGEBEN]<br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> 931e4988214a0d856dfb69f72e2e7555ab4cb536 422 421 2012-10-22T17:15:23Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> 90e5358f31e870d58dddf937f318ec5a95dbf785 423 422 2012-10-22T17:16:12Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> c9c5e0e065232cbc852f3ca01da91a027a3ba473 424 423 2012-10-22T17:16:34Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> 355f76cec2fc7eac3f4cd8409841f5e4c6545148 425 424 2012-10-22T17:17:22Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> 97f6c0d53ac3c01be86e08a01d02720dbf063fd5 426 425 2012-10-22T17:17:37Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via fdisk Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> 4b9ee44884392d726dd2d53954f0382afa5860e3 427 426 2012-10-22T17:19:18Z Admin 1 /* Stick/HDD erstellen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> c17d6a7511fc24a52eaefe168db31cff80724160 428 427 2012-10-22T17:26:20Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist root!!<br /><br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! 427f25ae283678302bd8e2acb955fa75bd220e70 429 428 2012-10-22T17:27:24Z Admin 1 /* Debian konfigurieren und aktualisieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! 3baaf5886027fb27bc48c5c67460c1c4ced8923f 430 429 2012-10-22T17:31:54Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! 75a5748f3467fcb939df9af649aad7603bd87012 Datei:Flashen.jpg 6 155 420 2012-10-22T17:09:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Hauptseite 0 1 431 399 2012-10-22T17:52:54Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ e228c0d2e09e5611a092d959c8c3d8728ccb331a MediaWiki:Sidebar 8 3 432 409 2012-10-23T05:16:08Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 auf der NSLU2|Debian 6 auf der NSLU2 ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES ca3bde43bf706c14162af62d76ccadb1cc16f190 439 432 2012-10-23T05:37:27Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 auf der NSLU2|Debian 6 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 0cf33b4469028f02f9278a1eca112a45b030bd47 Nagios installieren und konfigurieren 0 156 433 2012-10-23T05:23:06Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|]slug] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== 8009d630add01540e21d40a5fa068dcf4d8e66bc 435 433 2012-10-23T05:23:47Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png]]slug] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== 72aa1699ae137f224e4d942eb91f45ba8b915fa7 437 435 2012-10-23T05:24:32Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== e3016c9d75972710d9760b37089118f49f043e0e 438 437 2012-10-23T05:27:23Z Admin 1 /* Nagios installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: a27893754d4906a7fe40c7ecd2e844d825aca6d4 440 438 2012-10-23T05:40:57Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. d9de3b9c85d3f57c0395f16c7b912db6b4ef3316 443 440 2012-10-24T05:28:32Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3 aufrufen.</pre></code> <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> 3ec48cad10fde1a4727afe4ab9a0d47e06cf73df 444 443 2012-10-24T05:29:03Z Admin 1 /* Nagios installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> 39e6ba4069be373dc0342188b527cf7f80170606 445 444 2012-10-24T05:30:57Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> a111e6c6bf910736c83501c24272f8188b53a5ef 446 445 2012-10-24T05:33:59Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> 04d405a2fcefc69190376bcf3adf9490bd6bb4f8 447 446 2012-10-24T05:39:00Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> 5e46f467ba6c1150e612f3a5963231e80a9aff8d 448 447 2012-10-24T05:42:01Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> d4107c5ba7170233e82d0e12e5f25c3451daebac 449 448 2012-10-24T05:45:24Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ba4210f70842ea24bceed6282008248e93abd613 450 449 2012-10-24T17:45:06Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> 682bc4b56c9c9e476f480178fc9199e115083297 451 450 2012-10-24T17:48:57Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei /etc/nagios3/conf.d/generic-host_nagios2.cfg . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben 0c9081dffa48fa81162ad11dfac603f51be9c4e7 452 451 2012-10-24T17:49:46Z Admin 1 /* Templates ändern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> 9f529b47a76e5cea831a658148d215667dbf3bcd 453 452 2012-10-24T17:58:17Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> Folgende Konfigurationsschritte: <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> 1b425862e691bc9af53160aa3ec5baa36172d78d 454 453 2012-10-24T18:02:52Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> d8685092d0993222fdada3dc23d03537896c3ffa 455 454 2012-10-24T18:06:27Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> 20e6bf26bcde31c8395b3435418dee7ecb892368 456 455 2012-10-24T18:13:10Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> 3695bd4b8b116d2e3dd5fe97e401ebc2916b63f0 457 456 2012-10-24T18:17:49Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> 548d109920114ad209f95576bf3fbe8512bc36d6 458 457 2012-10-24T18:20:02Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> b885572247c483417140c2c8b5400667a76e6bc8 459 458 2012-10-24T18:25:31Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den NRPE Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> eea6aa17d105b33cfa86476c38b14930b8e48d6a 460 459 2012-10-24T18:27:29Z Admin 1 /* Remote Plugin Executor (NRPE) */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Nagios: http://www.nagios.org<br /> Debian: http://www.debian.org <br /><br /> Empfehlenswerte Literatur: Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465/ref=sr_1_2?ie=UTF8&s=books&qid=1251570490&sr=8-2 <br /><br /> 5551cddd53e2800979b3a9cc348492d8d2c13fbe Datei:Nagios nslu2 2.png.png 6 157 434 2012-10-23T05:23:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Sluggykl.png 6 158 436 2012-10-23T05:23:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Nagios install 1.png.png 6 159 441 2012-10-23T05:41:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Nagios intsall 2.png.png 6 160 442 2012-10-23T05:41:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Nagios installieren und konfigurieren 0 156 461 460 2012-10-24T18:28:53Z Admin 1 /* Remote Plugin Executor (NRPE) */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> 62f13bbb0e1e398d6ebbd74a6a313420e6035929 462 461 2012-10-24T18:30:39Z Admin 1 /* Plugin Remote ausführen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa //in eine Zeile schreiben// -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> e9ce7f9fab07ac8968e294dfbc22274a57ecbc60 463 462 2012-10-24T18:31:51Z Admin 1 /* Plugin Remote ausführen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios, eine freie Servermonitoring Software, die weit verbreitet ist und es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> 5a80cfd004e0cfecc4b45f4ac5a8092ce82c3c32 465 463 2012-10-24T22:20:42Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu Nagios Core 3, eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> d3c83cf8d85c41d012e9746b7cfcd85962800ce9 466 465 2012-10-24T22:21:02Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> 34445babb12ae5ca0736f7ca11c65ecbd95300b4 473 466 2012-10-25T05:38:28Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 950c7c03e85602205281a4fb45c320e5ac67fdeb 476 473 2012-10-25T05:41:29Z Admin 1 /* Plugin Remote ausführen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> e58189d4e24f0bc374771e0c3a95f3b3099b288c 477 476 2012-10-25T05:42:21Z Admin 1 /* MYSQL testen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> aa5fcda73fd6d61597aa6e4609e0607a47959e81 478 477 2012-10-25T05:43:05Z Admin 1 /* Spezialfall Mail Queues */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 8bb98788950b78842a4d35b52eeabc2e37daad2f 479 478 2012-10-25T05:44:05Z Admin 1 /* Externes Plugin integrieren oder selbst schreiben */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 949b3981821e95f7980f2963c0f729c7bbfdf177 480 479 2012-10-25T05:44:42Z Admin 1 /* Plugin Remote ausführen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 7419c42bf291a6ab78ae6d566ac95c4a5489a74d 486 480 2012-10-26T05:41:02Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Nagios,Installieren,Konfigurieren,Linux,NSLU2,Monitoring</metakeywords> 62c1c6e3e36d15641b7e806e4afbf32ccede6400 500 486 2012-10-28T02:35:40Z Admin 1 /* Spezialfall Mail Queues */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo</pre></code> Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigen definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Nagios,Installieren,Konfigurieren,Linux,NSLU2,Monitoring</metakeywords> f5cc3aaf12abef526a198595a184eecdd7966f17 Hauptseite 0 1 464 431 2012-10-24T18:45:28Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 8182f9df7366a81e04159d1124dfb18808914da3 483 464 2012-10-25T22:10:04Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:serverdaheim.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 3b038290b1011ed904bf4200bc0e0aa6bc8ecdb2 490 483 2012-10-27T15:16:53Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ a33b9ed6ffe06d56de7364b6ea998e9bfacf5b20 501 490 2012-10-28T13:44:46Z 24.134.229.187 0 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ [[Bild:snowball.jpg]] b37203ea118c74b8b9a9c0e1b08e1c756db88c13 508 501 2012-10-28T14:35:58Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo2.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ a33b9ed6ffe06d56de7364b6ea998e9bfacf5b20 Debian Kernel kompilieren 0 93 467 104 2012-10-25T05:28:37Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:kernel.png|Tux]] <br /> ''Tux''</div>'''Kernel Compile Quickdone auf einem Debian 6 Squeeze'''''Kursiver Text'' <br /><br /> Dieses Beispiel basiert auf dem derzeit aktuellen Linux Kernel 3.6.3. Gegebenenfalls sind hier die Versionsnummern im Tutorial entsprechend anzupassen. <br /><br /> Folgende Pakete müssen installiert sein: <br /><br /> '''kernel-package'''<br /> '''libncurses5-dev'''<br /> '''build-essential'''<br /> '''wget''' <br /><br /> optional:''' mc''' <code><pre> apt-get install kernel-package libncurses5-dev build-essential mc wget</pre></code> Jetzt beginnen wir mit dem Kernelcompile, indem wir die Sourcen herunterladen, entpacken, konfigurieren und kompilieren: <code><pre> cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.6.3.tar.bz2 tar xvfj linux-3.6.3.tar.bz2 ln -s linux-3.6.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre> make menuconfig</pre></code> Dann weiter mit dem Compile: <code><pre> make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> Wenn Ihr screen und einen Dualcore Prozessor einbinden wollt, dann lautet der Befehl <code><pre> CONCURRENCY_LEVEL=5 screen make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> ( statt der 5 bei einem Quadcore dann die 9. Also 2x Kerne + 1) <code><pre> cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre> dpkg -i kernel-image-3.6.3_KernelRebuild.01_i386.deb</pre></code> Rechner neu starten. <br /><br /> cu<br /> Gargi <br /> <br /> '''Kernel:''' http://www.kernel.org<br /> '''Debian:''' http://www.debian.org <br /> <br /> ef36ebccfff105a8070b5d1b13eab17b0601bbf4 469 467 2012-10-25T05:30:18Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:kernel.png|Tux]] <br /> ''Tux''</div> <br /><br /> '''''Kernel Compile Quickdone auf einem Debian 6 Squeeze''''' <br /><br /> Dieses Beispiel basiert auf dem derzeit aktuellen Linux Kernel 3.6.3. Gegebenenfalls sind hier die Versionsnummern im Tutorial entsprechend anzupassen. <br /><br /> Folgende Pakete müssen installiert sein: <br /><br /> '''kernel-package'''<br /> '''libncurses5-dev'''<br /> '''build-essential'''<br /> '''wget''' <br /><br /> optional:''' mc''' <code><pre> apt-get install kernel-package libncurses5-dev build-essential mc wget</pre></code> Jetzt beginnen wir mit dem Kernelcompile, indem wir die Sourcen herunterladen, entpacken, konfigurieren und kompilieren: <code><pre> cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.6.3.tar.bz2 tar xvfj linux-3.6.3.tar.bz2 ln -s linux-3.6.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre> make menuconfig</pre></code> Dann weiter mit dem Compile: <code><pre> make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> Wenn Ihr screen und einen Dualcore Prozessor einbinden wollt, dann lautet der Befehl <code><pre> CONCURRENCY_LEVEL=5 screen make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> ( statt der 5 bei einem Quadcore dann die 9. Also 2x Kerne + 1) <code><pre> cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre> dpkg -i kernel-image-3.6.3_KernelRebuild.01_i386.deb</pre></code> Rechner neu starten. <br /><br /> cu<br /> Gargi <br /> <br /> '''Kernel:''' http://www.kernel.org<br /> '''Debian:''' http://www.debian.org <br /> <br /> c11c0d4e80c4973b6d762e4203727cab8238741b 470 469 2012-10-25T05:30:31Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:kernel.png|Tux]] <br /> ''Tux''</div> <br /><br /> '''''Kernel Compile Quickdone auf einem Debian 6 Squeeze''''' <br /><br /> Dieses Beispiel basiert auf dem derzeit aktuellen Linux Kernel 3.6.3. Gegebenenfalls sind hier die Versionsnummern im Tutorial entsprechend anzupassen. <br /><br /><br /><br /> Folgende Pakete müssen installiert sein: <br /><br /> '''kernel-package'''<br /> '''libncurses5-dev'''<br /> '''build-essential'''<br /> '''wget''' <br /><br /> optional:''' mc''' <code><pre> apt-get install kernel-package libncurses5-dev build-essential mc wget</pre></code> Jetzt beginnen wir mit dem Kernelcompile, indem wir die Sourcen herunterladen, entpacken, konfigurieren und kompilieren: <code><pre> cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.6.3.tar.bz2 tar xvfj linux-3.6.3.tar.bz2 ln -s linux-3.6.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre> make menuconfig</pre></code> Dann weiter mit dem Compile: <code><pre> make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> Wenn Ihr screen und einen Dualcore Prozessor einbinden wollt, dann lautet der Befehl <code><pre> CONCURRENCY_LEVEL=5 screen make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> ( statt der 5 bei einem Quadcore dann die 9. Also 2x Kerne + 1) <code><pre> cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre> dpkg -i kernel-image-3.6.3_KernelRebuild.01_i386.deb</pre></code> Rechner neu starten. <br /><br /> cu<br /> Gargi <br /> <br /> '''Kernel:''' http://www.kernel.org<br /> '''Debian:''' http://www.debian.org <br /> <br /> e195ae4846a9103e32b298282233f0144908b942 471 470 2012-10-25T05:32:22Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:kernel.png|Tux]] <br /> ''Tux''</div> <br /><br /> '''''Kernel Compile Quickdone auf einem Debian 6 Squeeze''''' <br /><br /> Dieses Beispiel basiert auf dem derzeit aktuellen Linux Kernel 3.6.3. Gegebenenfalls sind hier die Versionsnummern im Tutorial entsprechend anzupassen. <br /><br /><br /><br /> Folgende Pakete müssen installiert sein: <br /><br /> '''kernel-package'''<br /> '''libncurses5-dev'''<br /> '''build-essential'''<br /> '''wget''' <br /><br /> optional:''' mc''' <code><pre> apt-get install kernel-package libncurses5-dev build-essential mc wget</pre></code> Jetzt beginnen wir mit dem Kernelcompile, indem wir die Sourcen herunterladen, entpacken, konfigurieren und kompilieren: <code><pre> cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.6.3.tar.bz2 tar xvfj linux-3.6.3.tar.bz2 ln -s linux-3.6.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre> make menuconfig</pre></code> Dann weiter mit dem Compile: <code><pre> make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> Wenn Ihr screen und einen Dualcore Prozessor einbinden wollt, dann lautet der Befehl <code><pre> CONCURRENCY_LEVEL=5 screen make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> ( statt der 5 bei einem Quadcore dann die 9. Also 2x Kerne + 1) <code><pre> cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre> dpkg -i kernel-image-3.6.3_KernelRebuild.01_i386.deb</pre></code> Rechner neu starten. <br /><br /> cu<br /> Pierre "Gargi" Kretschmer <br /> <br /> '''Kernel:''' http://www.kernel.org<br /> '''Debian:''' http://www.debian.org <br /> <br /> 72618b5b5f883d804cfa7da16f1b4a025edd130e 475 471 2012-10-25T05:39:30Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:kernel.png|Tux]] <br /> ''Tux''</div> <br /><br /> '''''Kernel Compile Quickdone auf einem Debian 6 Squeeze''''' <br /><br /> Dieses Beispiel basiert auf dem derzeit aktuellen Linux Kernel 3.6.3. Gegebenenfalls sind hier die Versionsnummern im Tutorial entsprechend anzupassen. <br /><br /><br /><br /> Folgende Pakete müssen installiert sein: <br /><br /> '''kernel-package'''<br /> '''libncurses5-dev'''<br /> '''build-essential'''<br /> '''wget''' <br /><br /> optional:''' mc''' <code><pre> apt-get install kernel-package libncurses5-dev build-essential mc wget</pre></code> Jetzt beginnen wir mit dem Kernelcompile, indem wir die Sourcen herunterladen, entpacken, konfigurieren und kompilieren: <code><pre> cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.6.3.tar.bz2 tar xvfj linux-3.6.3.tar.bz2 ln -s linux-3.6.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre> make menuconfig</pre></code> Dann weiter mit dem Compile: <code><pre> make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> Wenn Ihr screen und einen Dualcore Prozessor einbinden wollt, dann lautet der Befehl <code><pre> CONCURRENCY_LEVEL=5 screen make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> ( statt der 5 bei einem Quadcore dann die 9. Also 2x Kerne + 1) <code><pre> cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre> dpkg -i kernel-image-3.6.3_KernelRebuild.01_i386.deb</pre></code> Rechner neu starten. <br /><br /> cu<br /> Pierre "Gargi" Kretschmer <br /> <br /> '''Kernel:''' http://www.kernel.org<br /> '''Debian:''' http://www.debian.org <br /> <br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> e106dcbe95055978114620b08809c31a8eb8375b Datei:Kernel.png 6 161 468 2012-10-25T05:29:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian 6 auf der NSLU2 0 153 472 430 2012-10-25T05:35:07Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> 14f79fb6b3ae6edefb94ee433af3ef421ad9f82e 487 472 2012-10-26T05:42:35Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> eeca77cb77a22a7909e8118273b92ce756071f0c DOOM auf Linux 0 141 474 407 2012-10-25T05:39:03Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 47ddc7da5c0599936b6c8472e1db677cba0fe9ae 484 474 2012-10-26T05:39:15Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile,</metakeywords> 977572964acb7b16c45f9e67eec42c92f9c9d8ab 485 484 2012-10-26T05:39:25Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 26790e2b03603712b0cbc5cbb74da52f004cdee7 Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 481 340 2012-10-25T22:07:09Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 7adcea3cfcb02559647dc3ddc4db14ad0503e8d9 482 481 2012-10-25T22:07:27Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/ssl/certs/dovecot.pem'''<br> '''/etc/ssl/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] ccd7e7a705b49c7b027f23d0f650f2aa757cd102 Ioquake3 Server und Build Service 0 105 488 356 2012-10-26T05:43:31Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build</metakeywords> 706a0ce0594976382eada6a6015fd21be85c86c8 489 488 2012-10-26T05:44:33Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> f9531999af908e6f5ccc7d69dcd18178de28d605 Firewalling: iptables und Fail2Ban 0 102 492 324 2012-10-27T22:32:24Z Admin 1 /* fail2ban auf Debian Lenny installieren und konfigurieren */ wikitext text/x-wiki ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh # script written by Gargi 2009 http://www.gargi.org #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> Viele Grüße!<br> Gargi 7fb64ab7a5d917d8e5021b6d72a92b50118ee87b 493 492 2012-10-27T22:33:18Z Admin 1 /* Firewall Script mit iptables */ wikitext text/x-wiki ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> Viele Grüße!<br> Gargi 0389768d81fb6cce85c5bffacee81994d4c828a4 494 493 2012-10-27T22:37:06Z Admin 1 /* Firewall Script mit iptables */ wikitext text/x-wiki ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> Viele Grüße!<br> Gargi dab70618e70068d2f4142c5183b7dc969c347e5c 495 494 2012-10-27T23:02:07Z Admin 1 /* Port für spezielle Hardware MAC freigeben */ wikitext text/x-wiki ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Viele Grüße!<br> Gargi 8ab472fd6f6b5c35fa935c7ac064b8c11a9e0bf2 496 495 2012-10-27T23:02:20Z Admin 1 /* Portforwarding */ wikitext text/x-wiki ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Viele Grüße!<br> Gargi 88d95b2f7d48fec8fbee82f2fd2610dbe134a2b7 497 496 2012-10-27T23:09:17Z Admin 1 wikitext text/x-wiki ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Viele Grüße!<br> Gargi <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> cf1034068e2156226c89d726e3621c08d87e822f 498 497 2012-10-27T23:10:45Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Viele Grüße!<br> Gargi <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 0c29b7524e94d1284f8a8e735d2ce10b5ccf1f83 499 498 2012-10-27T23:12:26Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> f5b643e63dfe51748d8874ee9a06d320bb16fb3e Datei:Snowball.jpg 6 163 502 2012-10-28T13:51:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Serverprojekt08kl.jpg 6 165 506 2012-10-28T14:34:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Logo2.png 6 167 509 2012-10-28T14:36:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Myself.jpg 6 168 510 2012-10-28T14:36:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Knete2.png 6 169 511 2012-10-28T14:37:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Server kl.jpg 6 170 512 2012-10-28T14:38:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Crosscompile.jpg 6 171 513 2012-10-28T14:43:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Common.css 8 124 514 354 2012-10-28T14:59:30Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ div.body { margin 0 3px 0 1.25em; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} e02234865216d312338f8c8943ad96aa435392f7 515 514 2012-10-28T15:01:41Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ div.#mw-panel div.portal div.body { margin 0 3px 0 1.25em; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 4e5c8fb0b9088a9ce99fad130a7a43086e3ce088 MediaWiki:Common.css 8 124 516 515 2012-10-28T15:04:57Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ div.vectorMenu ul { position: absolute; background-color: white; border: solid 1px silver; border-top-width: 0; list-style: none; list-style-image: none; list-style-type: none; padding: 0; margin: 0; margin-left: -1px; margin-right: 3px; text-align: left; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 0bf5848f8b826766995bd6a3b95aa55aeb8ca507 517 516 2012-10-28T15:05:41Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 4a67b72d2ae29a2660d9369188f5cd8fed3e1bc1 518 517 2012-10-28T15:23:54Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ div#mw-panel div.portal div.body { margin: 0; padding-top: 0.5em; margin-right: 15px; margin-left: 1.25em; /* @embed */ background-image: url(images/portal-break.png); background-repeat: no-repeat; background-position: top left; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} e611b7a978d872222774905f8fef190f4f4d2de9 519 518 2012-10-28T15:25:27Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin: 0; padding-top: 0.5em; margin-right: 5px; margin-left: 1.25em; /* @embed */ background-image: url(images/portal-break.png); background-repeat: no-repeat; background-position: top left; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} f3ce8305c27e5ab223357839d785338239e97394 520 519 2012-10-28T15:27:02Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ div#mw-panel div.portal h5 { border: medium none; color: #444444; cursor: default; font-size: 0.75em; font-weight: bold; padding: 0 0.25em 0.25em 1.75em; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin: 0; padding-top: 0.5em; margin-right: 5px; margin-left: 1.25em; /* @embed */ background-image: url(images/portal-break.png); background-repeat: no-repeat; background-position: top left; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 75f940e6808f2ce46f235b6e8f7c4293e2fe4e3a 521 520 2012-10-28T15:27:50Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin: 0; padding-top: 0.5em; margin-right: 5px; margin-left: 1.25em; /* @embed */ background-image: url(images/portal-break.png); background-repeat: no-repeat; background-position: top left; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} c3614122df01a3bd44fac678fe2bceccea8b7528 522 521 2012-10-28T15:28:52Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} ed70427c577277ee2894242c10dfe50d1ef42c69 523 522 2012-10-28T16:09:27Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} bedac8a1c0e474f07bab9d74ac93f70b5efd5ca3 529 523 2012-10-28T17:44:34Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Footerlinks entfernen */ footer-places-privacy { display:none;} footer-places-disclaimer { display:none;} footer-places-about { display:none;} /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} f9af8c154cfdb35a429181e142662a3f7a56b759 530 529 2012-10-28T17:45:10Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 31e4b4464e6ee9eb72b0b8edf473b7c7e2931908 531 530 2012-10-28T17:47:31Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} c712d519f916e995a4d48531313939b5e96f2311 547 531 2012-10-30T07:49:04Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ tutframe { border-width:1px; border-style:solid; border-color:E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 630c04937b92997807f3bb96f1f270e4eaa6acb6 550 547 2012-10-30T07:51:36Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #tutframe { border-width:1px; border-style:solid; border-color:E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} bc76f4a0f8a24ea18907e9c14f30c05024545e77 552 550 2012-10-30T07:53:24Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #tutframe { border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 3c401828dc9c60b1bb8f129cb2f811b9d8789ed4 558 552 2012-10-30T07:58:28Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #tutframe { height: 480px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} e82a7661b5170e4513a2501986fea1e0cd004505 559 558 2012-10-30T07:58:57Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #tutframe { height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 7714f427f7bf0d80a370ea7ae2cb82370d6a3a59 561 559 2012-10-30T08:00:23Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} dcf01f82b32ae0280e0d775937cc3288fcaab535 564 561 2012-10-30T08:08:12Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 488px; float:left; padding-right: 5px; padding-top: 2px; border-right: solid; border-color-right:#E0E0E0; border-width-right:1px; text-align:left; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 7ece60f6de1e453344e9837c84b9d6255401febf 566 564 2012-10-30T08:09:47Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 488px; float:left; padding-right: 5px; padding-top: 5px; border-right: solid; border-color:#E0E0E0; border-width:1px; text-align:left; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 9c87be2928b620145e9b65047af6081287ce7a14 567 566 2012-10-30T08:11:07Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 488px; float:left; padding-right: 5px; margin-top: 5px; margin-bottom: 5px; border-right: solid; border-color:#E0E0E0; border-width:1px; text-align:left; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} e5fedd9442a553e596686ade63b84329b30e20f5 568 567 2012-10-30T08:12:43Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 488px; float:left; padding-right: 5px; margin-top: 5px; margin-bottom: 10px; margin-right: 5px; border-right: solid; border-color:#E0E0E0; border-width:1px; text-align:left; font-weight:bold; font-color: #CCCCCC; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 0a3056f8f324bb72edec2278bf52c7978c597931 569 568 2012-10-30T08:14:02Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 5px; margin-top: 5px; margin-right: 5px; border-right: solid; border-color:#E0E0E0; border-width:1px; text-align:left; font-weight:bold; color: #CCCCCC; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 6c1f1de06081f5033f11c64b548cd398e896f60e Hauptseite 0 1 526 508 2012-10-28T16:41:05Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 0e9c00cedd6463a052555200609f9a68cc82dcbc DOOM auf Linux 0 141 532 485 2012-10-28T18:30:55Z Admin 1 wikitext text/x-wiki <fblike></fblike> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 1b34c159d2e7a7dd3d45e55febac7264e2d140cc 533 532 2012-10-28T18:57:22Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 26790e2b03603712b0cbc5cbb74da52f004cdee7 Datei:Logo.png 6 175 534 2012-10-28T19:03:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian installieren 0 176 535 2012-10-30T07:29:14Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ Das folgende Tutorial beschreibt die Installation eines …“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== 5375df767daedf4ae803aca48dedb5a0783c5d48 536 535 2012-10-30T07:29:53Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test 8cb87dae2e6b34e9c6a49ba2bec15077af298027 537 536 2012-10-30T07:30:39Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test bcc2b29c278288d3f1de97147c34aaa813a8795e 538 537 2012-10-30T07:35:20Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /> ''Der Debian Wirbel''</div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test 5de7b879c99362f3570ea262eccb4645176d3bc5 540 538 2012-10-30T07:36:14Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test fd648ec838e49d6101da47212170bf23a9409478 541 540 2012-10-30T07:41:32Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div style="border-width:2px; border-style:solid; border-color:CCCCC> TEST </div> 46ce940573dbf10bba83b7393a3a466cb4457e77 542 541 2012-10-30T07:41:58Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div style="border-width:2px; border-style:solid; border-color:CCCCC;"> TEST </div> 35ff23a7df5fb52c58606babeab6803a02607f11 543 542 2012-10-30T07:43:06Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div style="border-width:1px; border-style:solid; border-color:CCCCCC;padding-left:5px;"> TEST </div> bced3a64d9bfc5bd4cd4f5fca3ba0c71f5ca6bbf 544 543 2012-10-30T07:43:54Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div style="border-width:1px; border-style:solid; border-color:grey;padding-left:5px;"> TEST </div> fbaa69c486d41e7e2f217e74ac0f51469898f1e9 545 544 2012-10-30T07:44:08Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div style="border-width:1px; border-style:solid; border-color:red;padding-left:5px;"> TEST </div> 8185b76cd96f56111f403f781dadb2f00b608ac9 546 545 2012-10-30T07:45:25Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div style="border-width:1px; border-style:solid; border-color:E0E0E0;padding-left:5px;"> TEST </div> ab52a7b67ca6e778263f6b51d1e7fa61d084e96d 548 546 2012-10-30T07:49:42Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div id="tutframe"> TEST </div> 0bcd149ce858398d781ecceff85817948b5b3f04 549 548 2012-10-30T07:50:56Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div class="tutframe"> TEST </div> ff5b5b32bd4f0121179c3c50e98ec721b584feb4 551 549 2012-10-30T07:52:02Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div id="tutframe"> TEST </div> 0bcd149ce858398d781ecceff85817948b5b3f04 553 551 2012-10-30T07:55:37Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Debiab01.jpg]] </div> TEST </div> df05fdb82c6f6ca4d3f16c5142bc4a3370f316be 554 553 2012-10-30T07:55:52Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Debian01.jpg]] </div> TEST </div> be1d7e34f799b73f6eb996b301285cef78e16a60 555 554 2012-10-30T07:56:28Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Debian01.jpg|Debian01]] </div> TEST </div> 38340574e63d81d865b20d208b84672b24153aee 556 555 2012-10-30T07:56:50Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== Test <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Bild:Debian01.jpg]] </div> TEST </div> 44b5ffd2be2287028c1017875c7a387a784819bf 560 556 2012-10-30T07:59:59Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Bild:Debian01.jpg]] </div> TEST </div> 318c2cc6e91c79467eb049ce9eae593038458e1a 562 560 2012-10-30T08:01:22Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Bild:Debian01.jpg]] </div> TEST </div> <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Bild:Debian02.jpg]] </div> TEST </div> d3f4a579ca738dc5ca95de04f4241b546abaa260 565 562 2012-10-30T08:08:45Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-right:20px;"> [[Bild:Debian01.jpg]] </div> TEST </div> <div id="tutframe"> <div style="float:right;padding-right:20px;"> [[Bild:Debian02.jpg]] </div> TEST </div> 72a3400a3268ef9b4a6263f129a56ee0c61202d1 Datei:Openlogo-nd-100.jpg 6 177 539 2012-10-30T07:35:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian01.jpg 6 178 557 2012-10-30T07:57:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian02.jpg 6 179 563 2012-10-30T08:01:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Common.css 8 124 570 569 2012-10-30T08:15:20Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 5px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#E0E0E0; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#E0E0E0; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 6589d47500105946e9987e8b9af4095ffe35fc2b 571 570 2012-10-30T08:16:19Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 5px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 5px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} e1d1f0d6b8744612c4a65006d673730c75044595 572 571 2012-10-30T08:16:44Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 5px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 4dfffc1cf75b6c2b3b0d9812d0f62e3adf15a0c1 574 572 2012-10-30T08:19:50Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 3px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 438b38f814ead39ab1533aa08f22bbeaa8f1c58d 575 574 2012-10-30T08:20:41Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 60px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 5c3bbddd2f865bd2a16e6c2f00efb5e84634fdbb 576 575 2012-10-30T08:21:19Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 8px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} e5bd46034e86a350623b26c3a27faedc445f8c50 577 576 2012-10-30T08:21:42Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 942f4cde10a41fdcff2347500737935baa35755a 580 577 2012-10-30T08:29:31Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; padding-right:3px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 9956b95f18d468a3e5b48cdedbaa6e5d4db0e0d7 581 580 2012-10-30T08:30:08Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; padding-right5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 40d7593ebc26c3cb8b8722d9f8c82f600329d8ab 582 581 2012-10-30T08:30:47Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:5px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 2b36be89812870d8e51f730554dd7126f2d6ee52 583 582 2012-10-30T08:31:18Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 6c6f94d0c6c595270d7d5c10c2a6bd41bd2c6990 Debian installieren 0 176 573 565 2012-10-30T08:17:49Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-right:20px;"> [[Bild:Debian01.jpg]] </div> TEST </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-right:20px;"> [[Bild:Debian02.jpg]] </div> TEST </div> 1e9bd60f4eb138859e8d1f8d8ed753c952be57db 578 573 2012-10-30T08:27:25Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-right:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Bootmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber hier an die Shell, da man oft hier via ssh sich einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br/< Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-right:20px;"> [[Bild:Debian02.jpg]] </div> TEST </div> eb6168ebb32687946ce5d7b8847dbdd7b4f283fa 579 578 2012-10-30T08:28:13Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Bootmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber hier an die Shell, da man oft hier via ssh sich einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> TEST </div> 288fd58680af61b4339e4ddc023d3450dd0b15b7 584 579 2012-10-30T08:37:09Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Bootmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber hier an die Shell, da man oft hier via ssh sich einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist hier Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle hier die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> f2fe152d90337fa9a99a10bdef81ff324484c10b 585 584 2012-10-30T08:39:57Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem Debian 6 Squeeze in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> b8b3b70dde3728fb85f9cfc8ba46ca71678d8143 586 585 2012-10-30T08:40:48Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> 14a00863ac5918ba4a2484b3ac8ea98d183ddd9a 587 586 2012-10-30T08:45:34Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> 7fe0e34de18d37b8b9a2450e6045d3a1838776a7 589 587 2012-10-30T08:56:34Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> 8bc67282e027a90f0a2dd10243ad476eda05f59c 597 589 2012-10-30T09:15:18Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Partition für die Auslagerung)''' <br /> </div> 5deb5f614865bbecedff0cce09f0605509d60214 598 597 2012-10-30T09:15:49Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Partition für die Auslagerung)''' <br /> </div> 2bfa9c7a62cfd291a15721e61669eb21750cf003 604 598 2012-10-30T09:34:46Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> bf72e19c6acc8a0087f9615336c8a2782131dbb3 616 604 2012-10-30T09:43:01Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> e0883a435c947ae6084167756c527ceef2802db2 617 616 2012-10-30T09:59:06Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> 0e401864071cfd7b623e0599b38654e75d406d74 Datei:Debian03.jpg 6 180 588 2012-10-30T08:45:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian04.jpg 6 181 590 2012-10-30T08:56:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian05.jpg 6 182 591 2012-10-30T08:56:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian06.jpg 6 183 592 2012-10-30T08:57:16Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian07.jpg 6 184 593 2012-10-30T08:57:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian08.jpg 6 185 594 2012-10-30T08:57:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian09.jpg 6 186 595 2012-10-30T08:58:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian10.jpg 6 187 596 2012-10-30T08:58:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian11.jpg 6 188 599 2012-10-30T09:16:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian12.jpg 6 189 600 2012-10-30T09:16:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian13.jpg 6 190 601 2012-10-30T09:16:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian14.jpg 6 191 602 2012-10-30T09:16:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian15.jpg 6 192 603 2012-10-30T09:17:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian16.jpg 6 193 605 2012-10-30T09:35:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian17.jpg 6 194 606 2012-10-30T09:35:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian18.jpg 6 195 607 2012-10-30T09:35:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian19.jpg 6 196 608 2012-10-30T09:35:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian20.jpg 6 197 609 2012-10-30T09:36:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian21.jpg 6 198 610 2012-10-30T09:36:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian22.jpg 6 199 611 2012-10-30T09:36:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian23.jpg 6 200 612 2012-10-30T09:39:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian24.jpg 6 201 613 2012-10-30T09:39:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian25.jpg 6 202 614 2012-10-30T09:42:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian31.jpg 6 203 615 2012-10-30T09:42:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian36.jpg 6 204 618 2012-10-30T09:59:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian37.jpg 6 205 619 2012-10-30T09:59:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian38.jpg 6 206 620 2012-10-30T10:00:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian39.jpg 6 207 621 2012-10-30T10:00:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian40.jpg 6 208 622 2012-10-30T10:00:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian42.jpg 6 209 623 2012-10-30T10:00:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian43.jpg 6 210 624 2012-10-30T10:01:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian44.jpg 6 211 625 2012-10-30T10:01:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian45.jpg 6 212 626 2012-10-30T10:01:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian46.jpg 6 213 627 2012-10-30T10:02:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian installieren 0 176 628 617 2012-10-30T18:45:37Z Admin 1 /* Installation */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> <div id="tutframe"><div id="framenum">37.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian48.jpg]] </div> Wer mag, der kann an dieser Stelle an der Paketverwendungserfassung teilnehmen. Muss man aber nicht unbedingt ... </div> <div id="tutframe"><div id="framenum">38.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian49.jpg]] </div> Nun wählen wir die gewünschten Softwarepakete aus. Uns genügen die Standard-Systemwerkzeuge. Wer mag, der kann auch den ssh-Server gleich voreinstellen, das lässt sich aber wie ich noch zeige schnell per Hand nachholen. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">39.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian50.jpg]] </div> Die Pakete werden nun installiert. Es hängt von der Geschwindigkeit der Internetverbindung ab, wie lange der Vorgang dauert. Da es sich aber nur im wenige Pakete handelt, geht das verhältnismäßig schnell. </div> <div id="tutframe"><div id="framenum">40.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian51.jpg]] </div> Zuletzt installieren wir den Bootloader in den Master Boot Record. Hier geht es mit '''Ja''' weiter. </div> <div id="tutframe"><div id="framenum">41.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian52.jpg]] </div> Geschafft. Der Server kann nun zum ersten Mal neu gebootet werden. Werft nachdem der Rechner heruntergefahren ist, die CD wieder aus. <br /><br /> Hier mit '''Weiter''' fortfahren. </div> <br /><br /> ==Der erste Start== <div id="tutframe"><div id="framenum">42.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian54.jpg]] </div> Wenn alles richtig gelaufen ist, dann seht Ihr den Bootloader Eueres neuen Systems. Lasst den ersten Wert voreingestellt und startet das System. <br /><br /> Hier mit '''Enter''' fortfahren. </div> <div id="tutframe"><div id="framenum">43.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian56.jpg]] </div> Wenn der Server durchgestartet ist, dann könnt Ihr Euch als root einloggen. </div> 9b9e0018361496d469ffffa130913fffec58fc45 636 628 2012-10-30T18:50:48Z Admin 1 /* Der erste Start */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> <div id="tutframe"><div id="framenum">37.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian48.jpg]] </div> Wer mag, der kann an dieser Stelle an der Paketverwendungserfassung teilnehmen. Muss man aber nicht unbedingt ... </div> <div id="tutframe"><div id="framenum">38.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian49.jpg]] </div> Nun wählen wir die gewünschten Softwarepakete aus. Uns genügen die Standard-Systemwerkzeuge. Wer mag, der kann auch den ssh-Server gleich voreinstellen, das lässt sich aber wie ich noch zeige schnell per Hand nachholen. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">39.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian50.jpg]] </div> Die Pakete werden nun installiert. Es hängt von der Geschwindigkeit der Internetverbindung ab, wie lange der Vorgang dauert. Da es sich aber nur im wenige Pakete handelt, geht das verhältnismäßig schnell. </div> <div id="tutframe"><div id="framenum">40.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian51.jpg]] </div> Zuletzt installieren wir den Bootloader in den Master Boot Record. Hier geht es mit '''Ja''' weiter. </div> <div id="tutframe"><div id="framenum">41.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian52.jpg]] </div> Geschafft. Der Server kann nun zum ersten Mal neu gebootet werden. Werft nachdem der Rechner heruntergefahren ist, die CD wieder aus. <br /><br /> Hier mit '''Weiter''' fortfahren. </div> <br /><br /> ==Der erste Start== <div id="tutframe"><div id="framenum">42.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian54.jpg]] </div> Wenn alles richtig gelaufen ist, dann seht Ihr den Bootloader Eueres neuen Systems. Lasst den ersten Wert voreingestellt und startet das System. <br /><br /> Hier mit '''Enter''' fortfahren. </div> <div id="tutframe"><div id="framenum">43.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian56.jpg]] </div> Wenn der Server durchgestartet ist, dann könnt Ihr Euch als root einloggen. </div> <br /><br /> Jetzt installieren wir noch unsere ersten wichtigen Pakete wie den ssh nach: <code><pre>apt-get install mc nano ssh htop</pre></code> Ihr könnt Euch nun mittels ssh auf Euren Server remote einloggen und weiter arbeiten. <br /><br /> ==Links== '''Debian:''' http://www.debian.org<br /> '''Diskussionsforum:''' http://www.gargi.org dc66ba99dc51d4c27776d7a2726f03bc702f2820 637 636 2012-10-30T18:52:46Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> <div id="tutframe"><div id="framenum">37.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian48.jpg]] </div> Wer mag, der kann an dieser Stelle an der Paketverwendungserfassung teilnehmen. Muss man aber nicht unbedingt ... </div> <div id="tutframe"><div id="framenum">38.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian49.jpg]] </div> Nun wählen wir die gewünschten Softwarepakete aus. Uns genügen die Standard-Systemwerkzeuge. Wer mag, der kann auch den ssh-Server gleich voreinstellen, das lässt sich aber wie ich noch zeige schnell per Hand nachholen. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">39.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian50.jpg]] </div> Die Pakete werden nun installiert. Es hängt von der Geschwindigkeit der Internetverbindung ab, wie lange der Vorgang dauert. Da es sich aber nur im wenige Pakete handelt, geht das verhältnismäßig schnell. </div> <div id="tutframe"><div id="framenum">40.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian51.jpg]] </div> Zuletzt installieren wir den Bootloader in den Master Boot Record. Hier geht es mit '''Ja''' weiter. </div> <div id="tutframe"><div id="framenum">41.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian52.jpg]] </div> Geschafft. Der Server kann nun zum ersten Mal neu gebootet werden. Werft nachdem der Rechner heruntergefahren ist, die CD wieder aus. <br /><br /> Hier mit '''Weiter''' fortfahren. </div> <br /><br /> ==Der erste Start== <div id="tutframe"><div id="framenum">42.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian54.jpg]] </div> Wenn alles richtig gelaufen ist, dann seht Ihr den Bootloader Eueres neuen Systems. Lasst den ersten Wert voreingestellt und startet das System. <br /><br /> Hier mit '''Enter''' fortfahren. </div> <div id="tutframe"><div id="framenum">43.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian56.jpg]] </div> Wenn der Server durchgestartet ist, dann könnt Ihr Euch als root einloggen. </div> <br /><br /> Jetzt installieren wir noch unsere ersten wichtigen Pakete wie den ssh nach: <code><pre>apt-get install mc nano ssh htop</pre></code> Ihr könnt Euch nun mittels ssh auf Euren Server remote einloggen und weiter arbeiten. <br /><br /> ==Links== '''Debian:''' http://www.debian.org<br /> '''Diskussionsforum:''' http://www.gargi.org<br /> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Linux, Installieren, Debian installieren,Debian, Squeeze</metakeywords> 77c95527dc686366cad541146475f332c4e6e095 638 637 2012-10-30T18:56:41Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> <div id="tutframe"><div id="framenum">37.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian48.jpg]] </div> Wer mag, der kann an dieser Stelle an der Paketverwendungserfassung teilnehmen. Muss man aber nicht unbedingt ... </div> <div id="tutframe"><div id="framenum">38.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian49.jpg]] </div> Nun wählen wir die gewünschten Softwarepakete aus. Uns genügen die Standard-Systemwerkzeuge. Wer mag, der kann auch den ssh-Server gleich voreinstellen, das lässt sich aber wie ich noch zeige schnell per Hand nachholen. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">39.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian50.jpg]] </div> Die Pakete werden nun installiert. Es hängt von der Geschwindigkeit der Internetverbindung ab, wie lange der Vorgang dauert. Da es sich aber nur im wenige Pakete handelt, geht das verhältnismäßig schnell. </div> <div id="tutframe"><div id="framenum">40.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian51.jpg]] </div> Zuletzt installieren wir den Bootloader in den Master Boot Record. Hier geht es mit '''Ja''' weiter. </div> <div id="tutframe"><div id="framenum">41.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian52.jpg]] </div> Geschafft. Der Server kann nun zum ersten Mal neu gebootet werden. Werft nachdem der Rechner heruntergefahren ist, die CD wieder aus. <br /><br /> Hier mit '''Weiter''' fortfahren. </div> <br /><br /> ==Der erste Start== <div id="tutframe"><div id="framenum">42.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian54.jpg]] </div> Wenn alles richtig gelaufen ist, dann seht Ihr den Bootloader Eueres neuen Systems. Lasst den ersten Wert voreingestellt und startet das System. <br /><br /> Hier mit '''Enter''' fortfahren. </div> <div id="tutframe"><div id="framenum">43.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian56.jpg]] </div> Wenn der Server durchgestartet ist, dann könnt Ihr Euch als root einloggen. </div> <br /><br /> Jetzt installieren wir noch unsere ersten wichtigen Pakete wie den ssh nach: <code><pre>apt-get install mc nano ssh htop</pre></code> Ihr könnt Euch nun mittels ssh auf Euren Server remote einloggen und weiter arbeiten. <br /><br /> ==Links== '''Debian:''' http://www.debian.org<br /> '''Diskussionsforum:''' http://www.gargi.org/showthread.php?4187-Debian-Server-6-installieren<br /> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Linux, Installieren, Debian installieren,Debian, Squeeze</metakeywords> 8c030f4359b3e644ae443fa1abb90e160589b705 Datei:Debian48.jpg 6 214 629 2012-10-30T18:45:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian49.jpg 6 215 630 2012-10-30T18:46:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian50.jpg 6 216 631 2012-10-30T18:46:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian51.jpg 6 217 632 2012-10-30T18:46:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian52.jpg 6 218 633 2012-10-30T18:47:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian54.jpg 6 219 634 2012-10-30T18:47:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Debian56.jpg 6 220 635 2012-10-30T18:47:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian 6 auf der NSLU2 0 153 639 487 2012-11-02T00:46:17Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/><br/><br/> '''Wichtige Links'''<br/> DEBIAN: http://www.debian.org<br/> CYRIUS TUTORIAL: http://www.cyrius.com/debian/nslu2/unpack.html<br/> GARGI.ORG TUTORIAL: http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> 00726ab6dcda58ebb0c149fd06e2a3f77d7a3891 640 639 2012-11-02T00:47:17Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/><br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> eed8805d01c5444d23f239ec7b05663963be470a Hauptseite 0 1 641 526 2012-11-02T00:50:16Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. </div> <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ a161dd12245a9a8839d73cbde251278a30d073f3 642 641 2012-11-02T00:51:38Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} <br/> {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich immer, wenn jemand etwas zu der Sache beitragen möchte. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ ba8b0c69c397b53ab30a06ad3a90337c29ea6bfa 643 642 2012-11-02T00:53:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 0b3a6cc623f2ed86bbd0a4acedcef2b9c1c4f241 644 643 2012-11-02T00:56:33Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> c18e2cd0da600c38c6dd63d74caee75cc75f6746 645 644 2012-11-02T00:59:25Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> {| style="width:100%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 874cce7fd87f2f18bc9e92f6bbd94369984e97c2 646 645 2012-11-02T01:00:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Wir hoffen, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 30fbcc1c4a5980dc06f9dafdd2e94200af184f63 647 646 2012-11-02T01:03:53Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 82287669acc01aa2bf041bfedb81a2b025d398df 648 647 2012-11-02T01:04:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <br/> <br/> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 61910aaebac03ba0e6ed6bf79c5a7fa5ea915fd6 658 648 2013-01-28T06:56:41Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <br/> <br/> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :ehrenamtlicher Moderator bei openSUSE :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 2b776e396dee52e81a4814b1f74ab0aa949146f1 DOOM auf Linux 0 141 649 533 2012-11-07T17:47:00Z Admin 1 /* Grafikoptionen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> a5ebb08f9036215f6384a5f15057913ec69ee1d0 Ioquake3 Server und Build Service 0 105 650 489 2013-01-18T06:18:52Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> f00ba7e82800cec3aa61045ada81c6ca5e7d2bbb 651 650 2013-01-18T06:19:32Z Admin 1 wikitext text/x-wiki '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <code><pre> #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt </pre></code> Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab. <code><pre> ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 </pre></code> Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen. <code><pre> cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah #before doing anything check server availability ping -c 1 svn.icculus.org if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work svn info svn://svn.icculus.org/quake3/trunk > /work/checkout.txt #checkout if something is to be done if [ $LANG = de_DE.UTF-8 ]; then cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt else cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt fi rm /work/checkout.txt ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work #clean out old svn get new sources rm -R /work/quake3 svn co svn://svn.icculus.org/quake3/trunk quake3 cd /work/quake3 make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf quake3$ver_neu.tar . gzip quake3$ver_neu.tar cp quake3$ver_neu.tar.gz /$files/ chown $fileuser:$fileuser /$files/quake3*.tar.gz rm /usr/local/games/*.gz #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu cp ioquake3_$ver_neu.zip /$files/ chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 2fae7ab23786e0c33982a02e499ed0e2ff67cbc0 652 651 2013-01-28T06:46:39Z Admin 1 wikitext text/x-wiki '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash #!/bin/bash quakeuser=quaker files=/home/www/files fileuser=www buildfiles=/home/quaker/q3abuildfiles mailadresse=pierre@gargi.org madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 456f762f07ce69ded616b4e05cb87f9f59d4388a 653 652 2013-01-28T06:47:50Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash #!/bin/bash quakeuser=quaker files=/home/www/files fileuser=www buildfiles=/home/quaker/q3abuildfiles mailadresse=pierre@gargi.org madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 991352a487c8d15aacb692f05478c682393d2e7f 654 653 2013-01-28T06:48:00Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash #!/bin/bash quakeuser=quaker files=/home/www/files fileuser=www buildfiles=/home/quaker/q3abuildfiles mailadresse=pierre@gargi.org madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 8eb593ad464c4a488c5d28d53566dd0c7915f39d 655 654 2013-01-28T06:49:34Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash #!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> b0ec8f3ac2716f5c4f73bf155c6709761c6a567f 656 655 2013-01-28T06:50:22Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki '''Hinweis:''' Vor kurzem wurde ioquake3 von svn auf git umgestellt. D.h. das Script in der Form funktioniert nicht mehr. Ich habe mir dieses bereits angepasst und teste es im Moment. Sobald ich sicher bin, dass es klappt, passe ich das Buildscript an. <br /><br /> Viele Grüße!<br /> Pierre, 18.01.2013 <br /><br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 0d31677e4a8d8d26ff9c15f5a4b22046b536fcba 657 656 2013-01-28T06:50:37Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 8445dc7531081d890fd931c2723134e26d3df882 659 657 2013-01-29T06:19:15Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 597e27f205aad5f60eb0521e05b9f8b88cd8ac14 660 659 2013-01-29T06:21:32Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> cc6513a12d2116affd4b4f9fa26980282ddcc936 661 660 2013-01-29T06:49:08Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile ioquake3 als eine Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.2''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.2/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 89a548471a91c146035c180aa5ad524fc06ab6b0 662 661 2013-01-29T06:49:32Z Admin 1 /* Crosscompile ioquake3 als eine Windows 64 bit Version unter openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * cross-mingw-binutils<br> * cross-mingw-gcc<br> * cross-mingw-runtime<br> * cross-mingw-w32api<br> <br> Das sollte im Yast dann ungefähr wie folgt aussehen:<br> <br> Nach der Installation müssen noch folgende Links angelegt werden: <code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code> Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte. <br><br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.2''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.2/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 4b5428e4c2f05f949bed3bb3a839ac8bf9a5db75 663 662 2013-03-17T10:38:13Z Admin 1 /* Crosscompiler auf openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.2''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.2/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 2fb5a71e1a521edf8c9cc8e73f3a18484d492fcf 664 663 2013-03-17T10:44:15Z Admin 1 /* Crosscompile Windows 64 bit Version unter openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> da47cd17151358ce1ff0b2cae2c087793d54f8a8 665 664 2013-03-17T10:45:00Z Admin 1 /* Crosscompiler auf openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> ce4d7beacae2390960d675a92b35a9e5220a8604 666 665 2013-03-29T16:20:07Z Admin 1 /* Windows Client via mingw Crosscompiler */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>./cross-make-mingw.sh ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 23b36060d162d490dfe7242cd35c0147e0032acb 667 666 2013-03-29T16:20:52Z Admin 1 /* Crosscompiler auf openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>./cross-make-mingw64.sh ARCH=x64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x64.exe'''<br> '''ioquake3.x64.exe'''<br> '''renderer_opengl1_x64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 1d73ed67527922972d7e1c4077f0c07932fbb76c 668 667 2013-03-29T16:22:15Z Admin 1 /* Crosscompile Windows 64 bit Version unter openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll''' '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> b16b4fdb043f11479081263a92393b713f5f3b82 669 668 2013-03-29T16:23:00Z Admin 1 /* Crosscompile Windows 64 bit Version unter openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean ./cross-make-mingw.sh ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> dd351a2a19e421d3c427377d5a8d68949561aef3 Ioquake3 Server und Build Service 0 105 670 669 2013-03-29T16:24:37Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> dc381f548ff27e7b8aa2fd6a84e3d6d6b80fe44e 671 670 2013-03-30T12:22:18Z Admin 1 /* Dedicated Server auf Linux */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 35d48a3bc4813b93234f1c21050748095283f835 672 671 2013-03-30T12:28:49Z Admin 1 /* Windows Client via mingw Crosscompiler */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> a3dd5b362b46fff774439333b7ff0a42eca05930 673 672 2013-03-30T12:37:19Z Admin 1 /* Windows Client via mingw Crosscompiler */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 05d13b69ca0c48788f889e00904a59c3c3fcf2c6 678 673 2013-07-29T06:01:10Z Admin 1 /* Einfaches Buildservice Script */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 7bdea3d5d9d6f94166f5850986a4b68475f34592 679 678 2013-08-04T11:27:50Z Admin 1 /* Q3mon installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 6196706b57d045d3fca1e733b8048e26ad3f6dbf DOOM auf Linux 0 141 674 649 2013-06-02T10:34:37Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> bb5eccbac6f514d854d00cef0dd680d6835ed968 675 674 2013-06-02T10:49:33Z Admin 1 /* Grafikoptionen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 4d0c22fe9e7da19d0376cef7d9679d19bc34242a 677 675 2013-06-02T10:50:18Z Admin 1 /* Grafikoptionen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 4fff8b07eede2aea24ba4b44df1ab0fb0d3aaab2 690 677 2013-12-11T06:16:24Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über SVN ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis: <code><pre>svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 4910176dfa4357cdf6ed08dd018c42dc981f1975 691 690 2013-12-11T06:29:18Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 55860a6c49ffdfb440e6fd9160a87c7a7edbeca7 694 691 2014-05-26T06:08:35Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DGLEW_LIBRARY=/usr/lib/libGLEW.so -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 57880aa4656ebd0efcaf3519676f744289760486 699 694 2015-04-06T11:10:20Z Admin 1 /* FMOD installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX ( http://www.fmod.org/download-previous-products/ ) codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DGLEW_LIBRARY=/usr/lib/libGLEW.so -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Doom,Linux,openSUSE,compile</metakeywords> 150111063ef737076c0d88afd2cc0c97ba63cca3 Datei:Gzdoom multisample.jpg 6 221 676 2013-06-02T10:49:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian 6 auf der NSLU2 0 153 680 640 2013-08-13T06:27:37Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> a4a52d9f10439c827ec8deaf792a0b15ecd0b9ca 681 680 2013-08-13T06:27:49Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> 5d0e9a1364f378f76c1f3b3299c64d8416ccbd39 682 681 2013-08-13T06:32:09Z Admin 1 /* Stick/HDD erstellen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> ODER Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> 167b04ad500e2bd539e03b0ade84aed90e0a35cb 683 682 2013-08-13T06:32:55Z Admin 1 /* Stick/HDD erstellen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> c7d184a62b123621165a8415d429c2ef2eaf3f50 684 683 2013-08-13T06:37:08Z Admin 1 /* Upslug2 installieren und Image flashen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> 61304ee5629794b579f7c2c9f120774505aaef7e MediaWiki:Sidebar 8 3 685 439 2013-08-13T06:45:18Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 auf der NSLU2|Debian 6 auf der NSLU2 ** Debian 6 und höher auf der NSLU2|Debian 6 und hoeher auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 30dc366b0121b6ca9af53bda153722d88780d014 686 685 2013-08-13T06:45:58Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 auf der NSLU2|Debian 6 auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 73bb35409a2966020582d7480e7918e39bd6e22b 689 686 2013-08-13T06:48:42Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES e91e8a70f75fc887830f9a591a15d2bc2523b736 Debian 6 und 7 auf der NSLU2 0 222 687 2013-08-13T06:46:46Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;te…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> 61304ee5629794b579f7c2c9f120774505aaef7e 688 687 2013-08-13T06:47:57Z Admin 1 /* Vorwort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 oder auch Debian 7 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sda2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> 26a8797e6ce2bbab51a39f35de66507637210808 693 688 2014-01-30T21:11:31Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 oder auch Debian 7 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sde2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> a033a7b4e5ccdf14dd542e10d93f6b445e668ef2 Hauptseite 0 1 692 658 2013-12-11T23:55:39Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <br/> <br/> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 0e1fe4c71c8c79280c2c4cee7f105d09867ad0e3 Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 695 482 2014-10-05T18:07:28Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei: <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Passagen hin:<br> <br> '''protocols = imap imaps'''<br> ''(dort eben imap / imaps ergänzen)<''br> <br> '''disable_plaintext_auth = no'''<br> ''(# entfernen und auf no setzen)''<br> <br> '''ssl_disable = no'''<br> ''(# entfernen)''<br> <br> '''ssl_cert_file = /etc/ssl/certs/dovecot.pem'''<br> '''ssl_key_file = /etc/ssl/private/dovecot.pem'''<br> ''(# entfernen)''<br> <br> WICHTIG folgenden Parameter dann in der '''/etc/dovecot/conf.d/15-mailboxes.conf''' setzen:<br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] c5c22dc669e4db50a16ba5bb287bd66a2dd4156d 696 695 2014-10-05T18:11:39Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Folgende Zeile müssen geändert werden. <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] d80b5e92ac496e263f6e5744780c7dfe28ebbde4 697 696 2014-10-05T18:16:02Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)].<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 8f995f22cf583117b8bc22782921c4e4aa0ffacf 698 697 2014-10-05T18:19:47Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 9dc7b446ba6cd0dc313780f0e8a38358a71bdfd5 700 698 2015-06-12T05:29:47Z Admin 1 /* Installation von Getmail und die Konfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 0dea6398a4b9b1a5bc31d1e2f846ef4233ba07b5 701 700 2015-06-12T05:35:57Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 2e57797ce3213d0cebc8aa81db9e079fbb9c2a58 702 701 2015-06-12T05:36:33Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] a094171cf10ca2d93e8bb38eff5e1e5a2deacc8a 703 702 2015-06-12T05:37:36Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!<br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] be21d1c27a24339d0db8217dee0ce8319f392fc4 704 703 2015-06-12T05:38:18Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/15-mailboxes.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/%u/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] e7661f2af4398f79fde60642285e557834f3ffb6 705 704 2015-06-12T05:42:03Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] e8de809ce1686f4e99382f1dc8ed333b0da2b534 706 705 2015-06-12T06:21:01Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 6aa78516ad0456f47e4fc9b9b9f9e880b361eb9f 707 706 2015-06-12T06:21:16Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 4d1a376e6fe9e781db75f7141235faa3f1067bd7 708 707 2015-06-14T08:36:08Z Admin 1 /* Installation von Getmail und die Konfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] eca3f1f75ecf84852237bf77bfbff4d6d84f88d8 709 708 2015-06-14T09:42:42Z Admin 1 /* Installation von Procmail und die Konfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 3ee57cc0367b1ae7da56b383d8962bffa111ce70 710 709 2015-06-14T10:05:07Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd getmail4</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 054229b354ed54111b5ba5f1b8dae5f167644ca7 711 710 2015-06-14T10:15:44Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Dabei werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 0d26056cd3559a80213c239d43fb09f2b60857c6 712 711 2015-06-14T10:40:33Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] b2abf04ca221e2f07225fe837dda1b82acb66d11 713 712 2015-06-14T10:41:14Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 6945be33b419e8734e6fd3ea44fb5d440a0937c1 714 713 2015-06-14T10:43:20Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:/home/~mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] d2d19bf24fc4a36f05b7ca28e6cce6537fbb01c4 715 714 2015-06-14T11:13:44Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch zwei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] d4b2c3b7a9cf83ea7ca0ac9e72f4dee712d8f57f 716 715 2015-06-14T11:25:34Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Folgende Zeile kann auskommentiert werden, sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] c80126acf7e89436920e21c740305332cafbf724 717 716 2015-06-14T11:31:59Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''#disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 5171850a66a8d640ae4183598a2a236966731afc 718 717 2015-06-14T11:32:19Z Admin 1 /* Imap mit Dovecot */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne, dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] eaafea6ecdc9e809a4f77fa96299ad7e20aaa094 719 718 2015-06-14T11:35:11Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf'''bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] ac609467179dc9d4373086a2ea8e97a4cce5f393 Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 720 719 2015-06-14T11:35:31Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt dazu in der '''/etc/exim4/update-exim4.conf.conf''' bei der Variablen '''dc_local_interfaces''' den eigetragenen Wert. Hier müsst Ihr dann den Teil '''; ::1''' entfernen. Danach nochmal den MTA versuchen, neu zu starten: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 7e0ca3d1aca9abb25732e12ab05a39a965ce8620 721 720 2015-06-14T11:43:55Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 221cec836c298de119b7873439072d818aa1a3bd 722 721 2015-06-14T11:44:10Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 17ead07f3d5b54c978584ce128595fb55303848b 723 722 2015-06-14T11:50:23Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code><br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] befb22d55726b3323c885cd452c86167623d16db 724 723 2015-06-14T11:50:40Z Admin 1 /* E-Mails via Exim4 verschicken */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir folgende Erweiterungen. Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden: <code><pre> deb http://ftp.de.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt können wir folgendes nachinstallieren: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] b4a5f8d3e0f094a1be1faf673ffc8dabb783f737 725 724 2015-06-14T12:40:01Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha</pre></code> Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.<br> <br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] b650ed8854603eabe516572e35573203a72128a4 726 725 2015-06-14T13:14:44Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] d151ad961f832f1c25006427b7a4a9bb5d866efa 727 726 2015-06-14T13:16:18Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 57cd534e3aca08456eee305999ab69ba02705f3a 728 727 2015-06-14T13:30:11Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter: <code><pre>wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz</pre></code> ''(bitte auf [http://http://jameslick.com/clamassassin http://jameslick.com/clamassassin] nach der aktuellen Versionsnummer des Paketes schauen!)''<br> <br> Wir paken den Sourcecode aus: <code><pre>tar zvxf clamassassin-1.2.4.tar.gz</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 77a2fd9622d3b220988721db60076eb956e3f79b 729 728 2015-06-14T13:42:01Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 89dcc4d9ef00b61fb7f10e7425ebe2cc6fa4225b 730 729 2015-06-14T14:01:22Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/deafault/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] ded64cd871a257d6a841ed34514477732c7fab96 731 730 2015-06-14T14:05:03Z Admin 1 /* Spam tilgen mit Spamassassin */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>/etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 5c1be8c0401ddc3a11833a199a5b1d30de230f6e 732 731 2015-06-14T14:10:27Z Admin 1 /* Spam tilgen mit Spamassassin */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 72dbe0513d29095179c006b11dafd8fe9dc2598b 733 732 2015-06-14T14:35:42Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Openprotects Spamassassin Updates einbauen''' '''ACHTUNG NICHT MEHR VERWENDEN. DIENST EINGESTELLT! UPDATE FOLGT!!!!!!!'''<br> Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.<br> Stellt zunächst einmal fest, dass die TCP Ports 8090 und '''11371''' (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt arbeitet folgende Einträge ab (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob die öffentlichen Schlüssel noch aktuell sind): <code><pre> gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10 gpg --armor -o pub.gpg --export BDE9DC10 sa-update --import pub.gpg </pre></code> Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.<br> <br> Einfach unter '''/usr/local/bin''' das Script '''spamupdater''' anlegen: <code><pre>touch /usr/local/bin/spamupdater</pre></code> Das füllt mit folgenden Inhalt (bitte [http://saupdates.openprotect.com/ prüft hier] vorher nach, ob der öffentliche Schlüssel noch aktuell ist): <code><pre> #!/bin/sh #altes logfile loeschen rm /var/log/spamupdate.log #Updates downloaden. Bitte sicherstellen, ob #port TCP 8090 (out) freigeschaltet ist sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com //Umbruch! --channel updates.spamassassin.org #Spamassasin Dienst neu starten /etc/init.d/spamassassin restart >> /var/log/spamupdate.log #Uhrzeit eintragen echo "" >> /var/log/spamupdate.log date >> /var/log/spamupdate.log #Statusmail versenden mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log </pre></code> '''''Hinweis:''' Bei //Umbruch! bitte alles in EINE Zeile schreiben!!!''<br> <br> Macht das Teil ausführbar: <code><pre>chmod +x /usr/local/bin/spamupdater</pre></code> Dazu fügt den Aufruf in Eure cron mit ein: <code><pre>crontab -e</pre></code> Aufruf: <code><pre>1 5 * * * /usr/local/bin/spamupdater > /dev/null</pre></code> Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.<br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 45f6ad96547c29a073fff0bd036e7f6018dd6f18 734 733 2015-06-14T15:27:54Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] f6137715c92f4129c68c37ecf2cdc88a291515c1 735 734 2015-06-14T19:46:19Z Admin 1 /* Squirrelmail Webmailer */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <br><br> '''Options +FollowSymlinks'''<br> '''RewriteEngine On'''<br> '''RewriteCond %{HTTPS} off'''<br> '''RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]''' <br><br> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 05f48c0918cda5130735c44df7dad043cc2abbb2 736 735 2015-06-14T19:48:00Z Admin 1 /* Squirrelmail Webmailer */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] dab949a79d6eec3ed3fa2926a9208c1d20bdaa94 737 736 2015-06-14T19:48:44Z Admin 1 /* Squirrelmail Webmailer */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://saupdates.openprotect.com Openprotects Spamassassin Updates]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 6fe6322825f7c3598354768b47b89c66cbfb38b8 738 737 2015-06-14T19:53:01Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 5 [http://www.debian.org (Lenny)]. '''Ergänzung:''' Die Konfiguration läuft auch auf Debian 7 (Wheezy). Der Bereich "Dovecot" wurde entsprechend aktualisiert.<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] 3b6e3610b6bdc9d4fe992ebbb41546f0402b8d89 739 738 2015-06-14T20:06:08Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter] b82533f04375297f6eb8ffa4a9036721bcf1897c 740 739 2015-06-14T20:32:24Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag: [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 7df7d03d8132e71ce8499917c9147bc792d55627 741 740 2015-06-14T20:34:36Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter[http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 7288d0b8df02d8a12a2b0f01ae2a3934154a6b9b 742 741 2015-06-14T20:34:58Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 522fea9a280c27568aacf8c5e036cfb0d376965d 743 742 2015-06-14T20:35:48Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter]. Die Anmeldung und Nutzung des Forums ist kostenlos. }} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 3112692a10165188157e0a525e3231f1992131d3 744 743 2015-06-14T20:36:19Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter }} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 62acf71a42f068a79146074cd16cc5807efbe341 745 744 2015-06-14T20:36:44Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?t=1387 Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> d84df236e23377bac0bc62885319e8e100f3c72a 746 745 2015-06-14T20:37:03Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?t=1387 Debian]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 43bcecc0a9d289e709f31b9a6010940e4dd9d40e 747 746 2015-06-14T20:37:45Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Debian]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 97aa2a6b68773dc019e3ff1deb4aad3c61c66f8a 748 747 2015-06-14T20:38:30Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride none DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> ed3f49032115d6eb099bf14963a28cf3563b8c15 750 748 2015-06-20T09:34:41Z Admin 1 /* Squirrelmail Webmailer */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 93449049f6dd061f74e45399841d042986364ff2 751 750 2015-06-20T10:02:16Z Admin 1 /* Squirrelmail Webmailer */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> d20a750db38c6b63b30e5de56b88c4fe96d3a87a 754 751 2015-06-21T10:20:11Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code><pre>adduser getmail</pre></code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 0c5c582ce02e3d67c866b27f129ddb0b4eb1923d 755 754 2015-06-21T11:53:15Z Admin 1 /* Installation von Getmail und die Konfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <code>adduser getmail</code> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 23f4b02b1f2859d49087490d8790043c1e7bb7a6 756 755 2015-06-21T11:54:11Z Admin 1 /* Installation von Getmail und die Konfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br> <br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> b002da1b028467ae9e23f68853f15e231fde5196 Ioquake3 Server und Build Service 0 105 749 679 2015-06-15T05:09:39Z Admin 1 /* Windows Client via mingw Crosscompiler */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Hier der Hinweis, dass Ihr den '''Port 9418''' (TCP_OUT) freischalten müsst, solltet Ihr eine Firewall am Laufen haben. <br><br> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 1859586d3ea6557b31c371a0533d9983c2b701f0 Hauptseite 0 1 752 692 2015-06-20T10:08:13Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <br/> <br/> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 948a7ca59aec0b1e7ce5adcd6392ac25d6eaef0a Nagios installieren und konfigurieren 0 156 753 500 2015-06-21T09:57:36Z Admin 1 /* Remote Plugin Executor (NRPE) */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo</pre></code> Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigene definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Eine Festplatte könnt Ihr beispielsweise mittels deren UUID wie folgt prüfen: <code><pre> command[check_home]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -x /dev/disk/by-uuid/12345-1234... -p /home</pre></code> Der Parameter '''-x''' steht für das Device, das '''-p''' für den Mountpunkt. <br /><br /> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 <br /><br /> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> <metakeywords>Nagios,Installieren,Konfigurieren,Linux,NSLU2,Monitoring</metakeywords> 68ed1154649fac8dae861b560dd0ffcbfdc6455d MediaWiki:Common.css 8 124 757 583 2015-06-21T12:04:29Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } pre { border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 7b93690a8d4d71929fdab13c844da8aaaf257d81 758 757 2015-06-21T12:06:05Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { background-color: #FFE7A3; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 8908f0cf7965b899305422f6fbae51df666d8af2 759 758 2015-06-21T12:06:59Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 0cb57db488c47933f2848fe3527229fae68080e8 760 759 2015-06-21T12:17:01Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} 4e74d6db8b8e5bf7d63e56ada279e153f1cca060 761 760 2015-06-21T12:24:02Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.4; } 1e2094cfa8af185c9b117a25a6c9745be2a38491 762 761 2015-06-21T12:25:14Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 2px 2px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.4; } a63539fa45f5f6c71f7713695376a49043a370cb 763 762 2015-06-21T12:26:14Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 1px 1px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.4; } 9a64f925709ebe30237cf66f6be8c8d3e6412e36 764 763 2015-06-21T12:26:58Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 1px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.4; } f12b091a09d675208d7e09d97575b61627afd006 765 764 2015-06-21T12:28:52Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 1px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.4; } ef436cdb83d2092ebc168e7634f13d48113cf4bb 766 765 2015-06-21T12:30:17Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; padding-top: 2px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.5; } 88057115570da0661ee96ba727d675256389a3db 767 766 2015-06-21T12:31:07Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; padding-top: 4px; padding-bottom: 4px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.5; } 8fd237661b57f963c23283e47d5287cdc7768d16 768 767 2015-06-21T12:35:42Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.5; } 334abd7c56abff1fb3e2cc5a58f9026488a8ee5d 769 768 2015-06-21T12:45:44Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.5; } .mw-body { line-height: 1.5; } d312b618b41dcf9c0c7808bde2f0f18c57ce63a3 MediaWiki:Common.css 8 124 770 769 2015-06-21T12:46:52Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.5; } @media screen .mw-body { line-height: 1.5; } ba8e4326fa2e93dd0fcaada43232b732b9babab7 771 770 2015-06-21T12:49:41Z Admin 1 css text/css /* CSS an dieser Stelle wirkt sich auf alle Skins aus */ #framenum { width: 20px; height: 480px; float:left; padding-right: 7px; margin-top: 5px; margin-right: 10px; border-right: solid; border-color:#CCCCCC; border-width:1px; text-align:center; font-weight:bold; color: #7A7A7A; } #tutframe { margin-top: 8px; height: 490px; border-width:1px; border-style:solid; border-color:#CCCCCC; padding-left:6px; padding-right:5px; } /* Footerlinks entfernen */ #footer-places-privacy { display:none;} #footer-places-disclaimer { display:none;} #footer-places-about { display:none;} /* Footer zentrieren */ div#footer #footer-info li { text-align: center; } /* Abstand oben kleiner */ div#mw-panel { padding-top: 0; } /* Linkes Menü Überschrift fettgedruckt */ div#mw-panel div.portal h5 { font-weight: bold; } /* Linkes Menü Textpadding von der rechten Linie */ div#mw-panel div.portal div.body { margin-right: 5px; } /* Seitentitel der Hauptseite ausgeblendet */ body.page-Hauptseite h1.firstHeading { display:none; } h1, h2, h3, h4, h5, h6 { color: #A70D0D; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Blocksatz */ .ns-0 p { text-align:justify; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* div#p-navigation { font-size: 13px; } div#p-contents { font-size: 13px; } div#p-search { font-size: 13px; } div#p-tb { font-size: 13px; } div#p-NSLU2 { font-size: 13px; } div#p-Server_auf_intel_Atom { font-size: 13px; } div#p-Crossover-Themen { font-size: 13px; } */ /*Sidebar Schriftart auf allen Browsern gleich groß*/ .pBody {font-size:100%;} /* Zeilenabstand verkleinert */ .mw-body-content { line-height: 1.5; } .mw-body p { line-height: 1.5; } e54232b368857ba649414fd8a25fcdb7af0415b5 MySlug:Impressum 4 223 772 2015-06-21T13:03:42Z Admin 1 Die Seite wurde neu angelegt: „[[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/…“ wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge zu editieren, zu löschen oder zu blockieren. Beleidigende, rechtsverletzende oder nicht namentlich gekennzeichnete Kommentare (auch solche mit gefälschten Daten) werden gelöscht oder zum Zwecke der Strafverfolgung gesichert.Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden 325dc46026781a7d58dd48783d3cbbf4409bd969 Slugdebug 0 18 773 334 2015-06-21T13:41:49Z Admin 1 /* Fehler beim eaccelerator */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:scare_cover.jpg|logo]] ==Fehler beim eaccelerator== '''Wichtig:''' Schaut bitte einmal Eure Apache Error-Log Datei an: '''/opt/var/apache2/log/error_log''' Es kann sein, dass die mittlerweile sehr groß geworden ist und förmlich von eaccelerator Meldungen ( could not lock ) ist. Der eaccereator cacht im php-Bereich und sorgt für etwas mehr Performance beim Laden. Solltet Ihr die error_log vol von eaccelerator Meldungen haben (die kommen im Sekundentakt wenn eine php Seite geladen wird), dann müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Dann brauchen wir noch die dev- Files der php Installation: <code><pre>ipkg install php-dev</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Nun entfernen wir den Beschleuniger: <code><pre>ipkg remove eaccelerator</pre></code> Und starten den Indianer neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun holen wir uns den Quellcode des aktuellen eaccelrator: <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> (auf der Projektseite [http://bart.eaccelerator.net] des eaccelerator könnt Ihr Euch über die aktuelle Versionsnummer informieren) Das Paket entpacken wir locker aus der Hüfte: <code><pre>tar vxf eaccelerator-0.9.5.3.tar.bz2</pre></code> Ab in das Buildverzeichnis: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Nun keine Zeit verschwenden und sofort <code><pre>phpize</pre></code> eingeben. Danach konfigurieren wir den php Beschleuniger mit folgendem einfachen Befehl: <code><pre>./configure --prefix=/opt --with-eaccelerator-userid=nobody</pre></code> Das kann einwenig dauern. Wenn alles fehlerfrei durch ist, kann das Programm gebacken werden: <code><pre>make</pre></code> Danach der obligatorische install: <code><pre>make install</pre></code> Da wir die Scriptfiles nicht manuell anlegen wollen tun wir jetzt das, was keiner erwartet: Wir installieren das Paket nochmal aus dem repository: <code><pre>ipkg install eaccelerator</pre></code> Das legt uns alle benötigten Pakete an Aber wir löschen wieder das File, damit wir unser eigenes verwenden können: <code><pre>rm /opt/lib/php/extensions/eaccelerator.so</pre></code> Und sofort unsere neue Datei rein: <code><pre>cp /work/eaccelerator-0.9.5.3/modules/eaccelerator.so /opt/lib/php/extensions/eaccelerator.so</pre></code> Alte Apache Logdatei tillen: <code><pre>rm /opt/var/apache2/log/error_log</pre></code> Frische Apache Logdatei erzeugen: <code><pre>touch /opt/var/apache2/log/error_log</pre></code> Jetzt startet den Apache nochmal neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Und schaut Euch die Error-Log an: '''tail -f /opt/var/apache2/log/error_log''' Nun ruft Eure Internetseite auf. Sollte natürlich php-Code sein. Die Fehlermeldungen sollten nun nichtmehr auftauchen. Zudem schaut Euch mal Eure phpinfo.php Datei an, ob der eaccelerator tatsächlich cached. Das seht Ihr in der Sektion EACCELERATOR [[Bild:slug10.jpg|center]] Bei dem fehlerhaften eaccelerator sind bei den Memory und cached File Bereich die "0" drin. Wenn es läuft, dann stehen hier entsprechende Werte. <br /> <br /> <br /> ==Fehler bei Midnight Commander== Wer bei einer neuen Installation den Fehler beim Start des MC bekommen sollte, dass ein libext2fs.so nicht gefunden werden kann, der muss das Paket e2fsprogs nachinstallieren: <code><pre>ipkg install e2fsprogs</pre></code> Sollte allerdings mittlerweile nicht mehr auftreten <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -l -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Wenn der Befehl hängen bleibt und Ihr nicht wieder zurück zur Eingabeaufforderung kommt, dann beendet dies mit '''STRG+C''' . Dieser Effekt kann durchaus mit der neueren 6.10er Firmware auftauchen. In diesem Fall lasst die '''-l''' Option weg: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -l -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Bei obigen Fehler auch hier ohne der '''-l''' Option: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==vsftpd Fehler in Version 2.1.0== Mit der Version 2.1.0 kommt es leider zu folgenden Fehler beim Verbinden: '''500 OOPS: could not bind listening IPv4 socket''' Vermutlich wurden beim Codieren einige default Einstellungen nicht einkompiliert. Um die Geschichte nun wieder zu reparieren editiert die '''vsftpd.conf''': <code><pre>vi /opt/etc/vsftpd.conf</pre></code> Fügt folgende Zeilen bitte ein: '''listen=NO'''<br /> '''anonymous_enable=NO'''<br /> '''local_enable=YES'''<br /> '''write_enable=YES''' <br /> Speichert die Änderung ab und beendet den '''inetd''': <code><pre>killall inetd</pre></code> Jetzt startet den '''inetd''' neu: <code><pre>/etc/rc.d/rc.xinetd</pre></code> Jetzt sollte der Connect zu Eurem ftp wieder funktionieren. 61c59371771e3b18abfc477617a905557e216902 775 773 2015-06-21T13:43:08Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Fehler beim eaccelerator== '''Wichtig:''' Schaut bitte einmal Eure Apache Error-Log Datei an: '''/opt/var/apache2/log/error_log''' Es kann sein, dass die mittlerweile sehr groß geworden ist und förmlich von eaccelerator Meldungen ( could not lock ) ist. Der eaccereator cacht im php-Bereich und sorgt für etwas mehr Performance beim Laden. Solltet Ihr die error_log vol von eaccelerator Meldungen haben (die kommen im Sekundentakt wenn eine php Seite geladen wird), dann müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Dann brauchen wir noch die dev- Files der php Installation: <code><pre>ipkg install php-dev</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Nun entfernen wir den Beschleuniger: <code><pre>ipkg remove eaccelerator</pre></code> Und starten den Indianer neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun holen wir uns den Quellcode des aktuellen eaccelrator: <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> (auf der Projektseite [http://bart.eaccelerator.net] des eaccelerator könnt Ihr Euch über die aktuelle Versionsnummer informieren) Das Paket entpacken wir locker aus der Hüfte: <code><pre>tar vxf eaccelerator-0.9.5.3.tar.bz2</pre></code> Ab in das Buildverzeichnis: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Nun keine Zeit verschwenden und sofort <code><pre>phpize</pre></code> eingeben. Danach konfigurieren wir den php Beschleuniger mit folgendem einfachen Befehl: <code><pre>./configure --prefix=/opt --with-eaccelerator-userid=nobody</pre></code> Das kann einwenig dauern. Wenn alles fehlerfrei durch ist, kann das Programm gebacken werden: <code><pre>make</pre></code> Danach der obligatorische install: <code><pre>make install</pre></code> Da wir die Scriptfiles nicht manuell anlegen wollen tun wir jetzt das, was keiner erwartet: Wir installieren das Paket nochmal aus dem repository: <code><pre>ipkg install eaccelerator</pre></code> Das legt uns alle benötigten Pakete an Aber wir löschen wieder das File, damit wir unser eigenes verwenden können: <code><pre>rm /opt/lib/php/extensions/eaccelerator.so</pre></code> Und sofort unsere neue Datei rein: <code><pre>cp /work/eaccelerator-0.9.5.3/modules/eaccelerator.so /opt/lib/php/extensions/eaccelerator.so</pre></code> Alte Apache Logdatei tillen: <code><pre>rm /opt/var/apache2/log/error_log</pre></code> Frische Apache Logdatei erzeugen: <code><pre>touch /opt/var/apache2/log/error_log</pre></code> Jetzt startet den Apache nochmal neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Und schaut Euch die Error-Log an: '''tail -f /opt/var/apache2/log/error_log''' Nun ruft Eure Internetseite auf. Sollte natürlich php-Code sein. Die Fehlermeldungen sollten nun nichtmehr auftauchen. Zudem schaut Euch mal Eure phpinfo.php Datei an, ob der eaccelerator tatsächlich cached. Das seht Ihr in der Sektion EACCELERATOR [[Bild:slug10.jpg|center]] Bei dem fehlerhaften eaccelerator sind bei den Memory und cached File Bereich die "0" drin. Wenn es läuft, dann stehen hier entsprechende Werte. <br /> <br /> <br /> ==Fehler bei Midnight Commander== Wer bei einer neuen Installation den Fehler beim Start des MC bekommen sollte, dass ein libext2fs.so nicht gefunden werden kann, der muss das Paket e2fsprogs nachinstallieren: <code><pre>ipkg install e2fsprogs</pre></code> Sollte allerdings mittlerweile nicht mehr auftreten <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -l -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Wenn der Befehl hängen bleibt und Ihr nicht wieder zurück zur Eingabeaufforderung kommt, dann beendet dies mit '''STRG+C''' . Dieser Effekt kann durchaus mit der neueren 6.10er Firmware auftauchen. In diesem Fall lasst die '''-l''' Option weg: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -l -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Bei obigen Fehler auch hier ohne der '''-l''' Option: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==vsftpd Fehler in Version 2.1.0== Mit der Version 2.1.0 kommt es leider zu folgenden Fehler beim Verbinden: '''500 OOPS: could not bind listening IPv4 socket''' Vermutlich wurden beim Codieren einige default Einstellungen nicht einkompiliert. Um die Geschichte nun wieder zu reparieren editiert die '''vsftpd.conf''': <code><pre>vi /opt/etc/vsftpd.conf</pre></code> Fügt folgende Zeilen bitte ein: '''listen=NO'''<br /> '''anonymous_enable=NO'''<br /> '''local_enable=YES'''<br /> '''write_enable=YES''' <br /> Speichert die Änderung ab und beendet den '''inetd''': <code><pre>killall inetd</pre></code> Jetzt startet den '''inetd''' neu: <code><pre>/etc/rc.d/rc.xinetd</pre></code> Jetzt sollte der Connect zu Eurem ftp wieder funktionieren. 1746779b0effe03537fa9e8d295ba77d5688b0e5 Hauptseite 0 1 776 752 2015-06-21T14:14:18Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 06c87f000c07bde6563b0725ec9985c7d8949e22 MediaWiki:Mobile.css 8 224 777 2015-06-24T22:15:16Z Admin 1 Die Seite wurde neu angelegt: „/* Das folgende CSS wird für alle Nutzer der mobilen Version geladen. */ /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9;…“ css text/css /* Das folgende CSS wird für alle Nutzer der mobilen Version geladen. */ /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } 19a3a091e777395809087684c9b30fd4fe14277d Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 778 756 2015-06-27T14:03:17Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Legt nun einen Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 6981b02f5b1524048aef15543f29598f523a9d91 Datei:Virentest.jpg 6 225 779 2015-06-27T14:03:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 780 779 2015-06-27T14:04:06Z Admin 1 Admin lud eine neue Version von [[Datei:Virentest.jpg]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Mail schema.jpg 6 104 781 119 2015-06-27T15:04:39Z Admin 1 Admin lud eine neue Version von [[Datei:Mail schema.jpg]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Firewalling: iptables und Fail2Ban 0 102 782 499 2015-06-28T11:28:21Z Admin 1 /* Fail2ban : wie man einen Ban aufhebt */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 301acc77566bb07407392e504dba57229efc5aaf 783 782 2015-06-28T11:37:09Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80" OUT_ALLOWED_TCP="21 22 25 53 80" IN_ALLOWED_UDP="53 7878" OUT_ALLOWED_UDP="53" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 28b188dfa0aad76f77ead50957bdc75001f988a4 797 783 2015-06-28T12:10:04Z Admin 1 /* Firewall Script mit iptables */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 0790ffd965ed0a43e83f1a97dd1ece19c9d8ef12 798 797 2015-06-28T12:20:19Z Admin 1 /* Firewall Script mit iptables */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 6805cbb94253295b1f2d9ccd931b7c5918dd7285 MediaWiki:Sidebar 8 3 784 689 2015-06-28T11:44:13Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES f670b84ae1253afec3064e3a31f3c4217e9bab0c 800 784 2015-06-28T20:18:48Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Owncloud installieren | Owncloud installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 6a435d405b4477ebdc42655e719893c8f4fb6758 802 800 2015-06-28T20:20:08Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 1cfb8c8b94f5320b0f33a7a2168a5767c62bc2a4 803 802 2015-06-28T20:20:21Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Owncloud installieren | Owncloud installieren * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES 3718de6341314caa7788a5483b61107a9c10a472 Raspberry Pi 2 Model B: Blick auf die Platine 0 226 785 2015-06-28T11:45:53Z Admin 1 Die Seite wurde neu angelegt: „<div style="float:right;text-align:center;padding-left:20px"> [[Bild:rpi2.jpg|raspi2]] <br /> ''A big one... Raspberry Pi2''</div> Der Raspberry Pi 2 Model B e…“ wikitext text/x-wiki <div style="float:right;text-align:center;padding-left:20px"> [[Bild:rpi2.jpg|raspi2]] <br /> ''A big one... Raspberry Pi2''</div> Der Raspberry Pi 2 Model B ersetzte im Februar 2015 das Vorgängermodel Raspberry Pi Model B. Der Raspberry Pi 2 kommt mit folgender Spezifikation: :* 900MHz Quad-Core ARM Cortex-A7 CPU :* 1GB RAM :* 4 USB Ports :* 40 GPIO Pins :* Full HDMI Port :* Ethernet Port :* Kombinierter 3.5mm Audio Anschluss und Komposit Video :* Camera Interface (CSI) :* Display Interface (DSI) :* Micro SD Karten Slot :* VideoCore IV 3D Grafik Kern Da der Pi2 eine relativ geringe Stromaufnahme hat, eignet er sich auch wunderbar als kleiner Webserver für den Heimbereich. Gerade die 4 Kernvariante eignet sich besonders gut, da die am Server entstehende Last parallel auf den 4 Kernen abgearbeitet werden kann. Auch Kompilierungsvorgänge sind im Vergleich zu dem Vorgänger enorm beschleunigt. <br><br> Mit einen kleinen Trick kann eine externe USB Festplatte auch ohne einem stromgestützen HUB betrieben werden, und Daten im Netz bereit gestellt werden. Der Verbrauch mit einer laufenden externen Festplatte bewegt sich zwischen 3 - 5 Watt, was als sparsam betrachtet werden kann. Bei einem Stromausfall startet das Gerät neu durch. Es ist dennoch ein Puffer in Form eines [https://de.wikipedia.org/wiki/Unterbrechungsfreie_Stromversorgung USV Systems] zu empfehlen, da ein unkontrolliertes Abschalten auch immer das Risiko mit sich bringt, einen Dateisystemfehler auf gerade den empfindlichen SD Karten zu provozieren. Ein Backup eines laufenden Servers für solche Fälle ist damit keine verkehrte Idee. <br><br> [[Bild:multicore.jpg|multicore]] <br><br> Ein Gerät, was auf jeden Fall als Heimserver sehr interessant ist.<br><br> Euer<br> Gargi e16ff0086932de29d3c27ff4b814020b0fe722ee 796 785 2015-06-28T11:53:35Z Admin 1 wikitext text/x-wiki <div style="float:right;text-align:center;padding-left:20px"> [[Bild:rpi2.jpg|raspi2]] <br /> ''A big one... Raspberry Pi2''</div> Der Raspberry Pi 2 Model B ersetzte im Februar 2015 das Vorgängermodel Raspberry Pi Model B. Der Raspberry Pi 2 kommt mit folgender Spezifikation: :* 900MHz Quad-Core ARM Cortex-A7 CPU :* 1GB RAM :* 4 USB Ports :* 40 GPIO Pins :* Full HDMI Port :* Ethernet Port :* Kombinierter 3.5mm Audio Anschluss und Komposit Video :* Camera Interface (CSI) :* Display Interface (DSI) :* Micro SD Karten Slot :* VideoCore IV 3D Grafik Kern Da der Pi2 eine relativ geringe Stromaufnahme hat, eignet er sich auch wunderbar als kleiner Webserver für den Heimbereich. Gerade die 4 Kernvariante eignet sich besonders gut, da die am Server entstehende Last parallel auf den 4 Kernen abgearbeitet werden kann. Auch Kompilierungsvorgänge sind im Vergleich zu dem Vorgänger enorm beschleunigt. <br><br> Mit einen kleinen Trick kann eine externe USB Festplatte auch ohne einem stromgestützen HUB betrieben werden, und Daten im Netz bereit gestellt werden. Der Verbrauch mit einer laufenden externen Festplatte bewegt sich zwischen 3 - 5 Watt, was als sparsam betrachtet werden kann. Bei einem Stromausfall startet das Gerät neu durch. Es ist dennoch ein Puffer in Form eines [https://de.wikipedia.org/wiki/Unterbrechungsfreie_Stromversorgung USV Systems] zu empfehlen, da ein unkontrolliertes Abschalten auch immer das Risiko mit sich bringt, einen Dateisystemfehler auf gerade den empfindlichen SD Karten zu provozieren. Ein Backup eines laufenden Servers für solche Fälle ist damit keine verkehrte Idee. <br><br> [[Bild:multicore.jpg|multicore]] <br><br> Ein Gerät, was auf jeden Fall als Heimserver sehr interessant ist.<br><br> Euer<br> Gargi <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> 0cdca3157470a156313cbcedee26af0cf0aaf3a2 Datei:Rpi2.jpg 6 227 786 2015-06-28T11:46:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Multicore.jpg 6 228 787 2015-06-28T11:46:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Raspbian auf dem Raspberry Pi 2 installieren 0 229 788 2015-06-28T11:47:17Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br>…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br><br> Auf der Pi ein Raspbian zu installieren geht relativ einfach. Der hier beschriebene Weg funktioniert auf Basis eines beliebigen Linux auf dem Desktop. Ich verwende derzeit das aktuelle [http://www.opensuse.org openSUSE]. <br><br> Zuerst muss dazu sich eine microSD Karte angeschafft werden. Ich verwende hierfür eine 32GB Karte, 16 GB reichen aber auch erstmal aus. <br><br> Ihr benötigt zudem einen Kartenleser, damit Ihr die Karte an Eurem Linuxrechner vorbereiten könnt. Formatiert werden muss die Karte nicht. <br><br> ==Raspbian herunterladen und "installieren"== Unter Linux ladet Ihr dann erstmal das aktuelle Raspbian (zur Zeit Wheezy) herunter: <br><br> [http://www.raspberrypi.org/downloads Raspberry Downloads] <br><br> Ihr entpackt die Datei und erhaltet Damit ein Image (bin Datei). Dieses Image muss nur noch auf die Karte geschrieben werden: <code><pre>dd bs=1M if=Dateiname.bin of=/dev/sdx</pre></code> Bei Dateiname bitte den genauen Namen des Imges verwenden. Das Device '''/dev''' bitte ohne Partitionsnummer angeben. Also sollte die Karte als sde im System zu finden sein, dann '''/dev/sde'''. Solltet Ihr nicht sicher sein, welches Device die Karte im Kartenleser ist, dann mit einem <code><pre>fdisk -l</pre></code> anzeigen lassen. <br><br> ==Booten und konfigurieren== That's it! Wenn '''dd''' fertig geschrieben hat, dann die Karte in die Pi einstecken und mit dem Lan und via HDMI an einem Monitor anschließen. Zudem mindestens eine USB Tastatur dran für den Anfang. Jetzt Strom auf die Kiste geben und starten lassen. Ihr landet nach dem Boot recht schnell im Konfigurationsmenü (nur beim ersten Start):<br><br> [[Bild:raspiconf1.jpg|Konfiguration]]<br><br> '''Aktuell:''' Derzeit gibt es noch einen kleinen Fehler, der zumeist beim ersten Reboot Datenfehler auf der Karte bringt. Beendet deswegen zuerst das Programm '''raspi-config'''. Danach werdet root: <code><pre>sudo su</pre></code> Bei der Gelegenheit legt gleich mal ein eigenes Passwort für '''root''' an: <code><pre>passwd</pre></code> Jetzt aktualisiert erstmal die Firmware mit einem <code><pre>rpi-update</pre></code> Startet danach den Raspi neu. Jetzt meldet Euch als pi an. Dass Passwort ist '''raspberry'''. '''Achtung!''' Englische Tastatur! Für das y müsst Ihr deshalb z auf der deutschen Tastatur drücken <br><br> Jetzt startet den '''raspi-config''' neu: <code><pre>sudo raspi-config</pre></code> Ihr seht hier einige Konfigurationsmöglichkeiten, die man vornehmen kann und sollte. Dabei ist festzustellen, dass man hierüber viel Arbeit abgenommen bekommt. #Der erste Punkt '''"Expand Filesystem"''' ist das, was Ihr als erstes machen solltet. Das Image nutzt natürlich nicht Eure komplette SD Karte. Erst wenn Ihr diesen Punkt anstoßt, wird das Dateisystem auf den kompletten Datenspeicher ausgedehnt. #'''Change User Passwort:''' Hier könnt Ihr das Passwort des Users pi ändern. Das ist der Standarduser, der bereits eingerichtet ist und über den Ihr dann auch Root-Zugriff erlangen könnt (sudo su). Deswegen sollte hier sofort ein eigenes und sicheres Passwort gewählt werden. Das Standardpasswort lautet '''raspberry''' . Wenn Ihr später lieber mit root direkt arbeiten wollt, wie Ihr es eventuell von Debian gewohnt seid, dann könnt Ihr auch erstmal mittels '''sudo su root''' werden und danach mittels '''passwd''' ein neues Passwort für root festlegen. Danach könnt Ihr Euch direkt als Root anmelden. #'''Enable Boot to Desktop:''' Hier könnt Ihr einstellen, dass gleich die grafische Benutzeroberfläche gestartet wird. Ansonsten muss man diese manuell mit startx aktivieren. Ich mache das nicht, da wir einen Server aufbauen und ausschließlich über die Konsole arbeiten werden. #'''Internationalisation:''' Hier stellt Ihr Eure Sprache, Tastatur und Zeitzone ein. Das Menü ist selbsterklärend. <br> Wir steigen dann noch bei den '''Advanced Options''' ein:<br><br> [[Bild:Advanced.jpg|Advanced]] <br><br> Hier ist auf jeden Fall für uns der Punkt Enable remote command ('''SSH''') wichtig. Das aktivieren wir. Danach legen wir noch unseren '''Hostnamen''' fest. Jetzt starten wir die Kiste neu. Wenn Ihr wieder dieses Menü aufrufen wollt, dann startet dieses mittels <code><pre>raspi-config</pre></code> <br><br> ==Kleine Nacharbeiten== Loggt Euch nochmal als '''pi''' ein und werdet '''root''': <code><pre>sudo su</pre></code> Aktualisiert erstmal die Kiste: <code><pre>apt-get update apt-get upgrade</pre></code> Ich installiere gerne noch folgende Programme nach: <code><pre>apt-get install mc htop</pre></code> Danach nehmen wir uns noch unsere Netzwerkkonfiguration vor, solltet Ihr Eurer pi eine feste IP zuweisen wollen: <code><pre>nano /boot/cmdline.txt</pre></code> Die Datei besteht nur aus einer Zeile. Setzt hier nur hinten Eure gewünschte IP dazu:<br><br> ip=192.168.X.X<br><br> (die X durch Eure echte IP Werte ersetzen) <br><br> Danach die Änderung speichern! <br><br> '''ALTERNATIV:'''<br> Solltet Ihr mit obiger Methode 2 IP Adressen hinterlegt haben (eine statische, eine von Eurem DHCP Server geliefert), dann könnt Ihr anstatt wie kürz vorher beschrieben wie folgt vorgehen: Editiert die Datei '''/etc/dhcpcd.conf''' und fügt folgende Zeilen zum Schluss ein: <code><pre>interface eth0 static ip_address=192.168.XXX.XXX/24 static routers=192.168.XXX.1 static domain_name_servers=192.168.XXX.1</pre></code> Verwendet entsprechend die passende IPs. Speichert die Änderung und startet neu. <br><br> Zum Schluss kümmern wir uns noch um die '''SWAP''' Datei. Diese richten wir auf doppelte Größe Eures RAMs ein. Also wenn Ihr ein pi mit 1024 MB habt, dann auf 2048MB Swap. <code><pre>sudo su echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile dphys-swapfile setup dphys-swapfile swapon</pre></code> Stellt nun noch die Sprache, Zeitzone und Tastatur ein.<br> Zeitzone: <code><pre>dpkg-reconfigure tzdata</pre></code> Sprache: <code><pre>dpkg-reconfigure locales</pre></code> ''(hier de_de UTF8 verwenden und die eng Markierung herausnehmen)'' <br><br> Tastatur: <code><pre>dpkg-reconfigure keyboard-configuration</pre></code> ''(hier die Tastatur auf German stellen. Den Rest einfach übernehmen)'' <br><br> Das war es dann schonmal. Mit einem <code><pre>reboot</pre></code> startet die Kiste neu. Wenn Ihr jetzt nur noch die pi als Server verwenden wollt, dann könnt Ihr ab jetzt die Tastatur und den Monitor weg lassen und Euch via '''ssh''' an die dafür vergebene IP Adresse einloggen und weiter konfigurieren. <br><br> Wenn es beim Login am '''ssh''' dauert, bis die Passwortabfrage kommt, dann kann es sein, dass der DNS nicht korrekt eingestellt ist. Überprüft mit einem <code><pre> cat /etc/resolv.conf</pre></code> ob der DNS korrekt auf der Kiste eingetragen ist. Falls nicht, editiert die Konfiguration entsprechend: <code><pre> nano /etc/resolv.conf</pre></code> 26a28c59583ee2aadd1dda75e10a00ae0c343349 Datei:Raspiinbox.jpg 6 230 789 2015-06-28T11:47:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Raspiconf1.jpg 6 231 790 2015-06-28T11:48:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Advanced.jpg 6 232 791 2015-06-28T11:48:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 792 791 2015-06-28T11:48:57Z Admin 1 Admin lud eine neue Version von [[Datei:Advanced.jpg]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Ipv6 aktivieren 0 233 793 2015-06-28T11:49:51Z Admin 1 Die Seite wurde neu angelegt: „Standardmäßig ist '''ipv6''' nicht aktiv. Wer das Protokoll dennoch benötigt, kann es sehr einfach anschalten. Testet erstmal, ob es geht: <code><pre>modpro…“ wikitext text/x-wiki Standardmäßig ist '''ipv6''' nicht aktiv. Wer das Protokoll dennoch benötigt, kann es sehr einfach anschalten. Testet erstmal, ob es geht: <code><pre>modprobe ipv6</pre></code> Wenn das ohne Fehler klappt können wir es permanent in die '''/etc/modules''' eintragen: <code><pre> echo ipv6 >> /etc/modules</pre></code> Danach startet die Kiste neu durch. <br><br> Mittels <code><pre> ifconfig</pre></code> seht Ihr dann, dass an eth0 eine ipv6 Range angebunden ist. dfa3e0737b07794958ee11b0c4a00abdb25cf70a Zusätzliche Festplatte und Spindown 0 234 794 2015-06-28T11:50:17Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Ziel ist es, eine große Datenplatte…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Ziel ist es, eine große Datenplatte an die Pi zu hängen, die dann im Netz als Datenspeicher/Lieferant dienen soll. Dabei möchte ich natürlich nicht, dass die Platte ständig läuft, sondern sich nach einer gewissen Zeit an Inaktivität abschaltet. Dies macht allerdings auch nur dann Sinn, wenn in dem Bereich nicht ständig auf die Platte zugegriffen werden muss. Deswegen überlegt, ob Ihr den Spindown wirklich benötigt. Manche Festplatten unterstützen diese Funktion auch nicht. Meine Platte soll dann als '''/home''' gemountet werden. <br><br> ==Mehr Power auf den USB Ports unter Raspbian== Der Raspi 2 kommt ja jetzt nun mit 4 USB Ports. Wer allerdings eine externe Festplatte daran anschließt wird schnell eines besseren belehrt: Die Platte läuft nicht an. Jetzt kann man natürlich mittels eines stromgestützten USB Hub die Sache in den Griff bekommen, aber wir wollen ja nicht unbedingt noch ein Gerät an den Heimserver stöpseln. <br> Der Grund dafür ist, dass die Ports mit maximal 600mA belegt sind. Wer mag, kann die Stärke auf 1,2A über einen kleinen Parameter erhöhen. Editiert unter Raspbian deshalb die '''/boot/config.txt''' . Ergänzt diese durch den Parameter <code><pre>max_usb_current=1</pre></code> Startet danach den Raspi 2 neu. Jetzt sollte die externe Festplatte laufen. <br><br> Denkt daran, dass Euer Netzteil entsprechend Leistungsstark sein muss. Ein 5V 1A Gerät genügt hier nicht. Das Netzteil muss zumindest 2A liefern. Ob mehr notwendig ist hängt davon ab, ob Ihr noch mehr am USB betreiben wollt. <br><br> ==Daten sichern und Platte vorbereiten== Bitte auf Eurem Server als '''root''' via ssh einloggen und anmelden. <br><br> Jetzt lege ich ein neues Backupverzeichnis an: <code><pre> cd / mkdir home_save</pre></code> Dorthin kopiere ich alle meine Heimatverzeichnisse: <code><pre> cp -ar /home/* /home_save/</pre></code> Kontrolle, hierbei insbesondere dann auf die Zeitstempel und User / Gruppen achten: <code><pre> cd /home_save ls -la</pre></code> Jetzt kille ich einfach die Dateien in Home: <code><pre> rm -R /home/*</pre></code> Auf das leere Verzeichnis mounte ich dann später meine Platte und kopiere meine gesicherten Daten zurück. <br><br> Jetzt bereiten wir unsere neue Platte vor. Hierzu wird diese angesteckt und via fdisk-l gecheckt, als was diese erkannt wird. Vermutlich '''/dev/sda1''' . Wenn die Platte neu gekauft ist, dann wird diese bereits mit vfat formatiert sein. Das machen wir natürlich als erstes weg. <code><pre> fdisk /dev/sda</pre></code> Danach drücken wir die Taste '''d''' um die vorhandene Partition zu löschen. Nun drücken wir '''n''' um eine neue Partition anzulegen. Dazu dann '''p''' , damit das eine primäre Partition wird. Den Beginn und das Ende der Sektoren übernehmen wir einfach, da wir eine Platte vollständig nutzen wollen. Danach stellen wir das Dateisystem ein. Dazu drückt die Taste '''t''' und gebt '''83''' für Linux ein. Jetzt noch auf '''w''' drücken, damit die Änderungen auf die Platte geschrieben werden. Alle alten Dateien auf der Platte sind damit erstmal "weg" (stimmt nicht ganz, aber zumindest so nicht mehr ansprechbar). <br><br> Als nächstes legen wir ein '''ext4''' Dateisystem an. Dazu geben wir dann folgenden Befehl ein: <code><pre> mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sda1</pre></code> Die Parameter in diesem Befehl bewirken, dass die inode Tabelle bereits beim Erstellen des Dateisystem geschrieben (ausgenullt) wird. Deswegen dauert in unserem Fall das Erstellen der ext4 Partition einwenig länger, dafür muss dies dann nicht später beim ersten Mount im Hintergrund erledigt werden. Das dauert wesentlich länger und verhindert, dass wir in der Zeit mit dem Thema "Spindown" gleich weiter machen können . <br><br> Wenn die Platte dann fertig vorbereitet ist, müssen wir noch unsere fstab anpassen und als '''/home''' einbinden. Zuerst ermitteln wir die '''UUID''' der Festplatte: <code><pre> blkid /dev/sda1</pre></code> Ihr bekommt dann einen Zeichenstring geliefert: <br><br> '''/dev/sda1: UUID="XXXX-12345..."''' <br><br> Kopiert den String zwischen den " " in die Zwischenablage und editiert die fstab: <code><pre> nano /etc/fstab</pre></code> Dort füge ich dann folgende Zeile gemäß Euren echten Zeichenstring ein: <code><pre> UUID=XXXX-12345... /home ext4 defaults,noatime,commit=60 0 2</pre></code> Das mountet mir dann meine Platte als '''/home'''. Speichern und neu starten. <br><br> ==Daten zurückkopieren und Spindown mit hdparm== Wenn die Pi durchgestartet ist, solltet Ihr nun auf das Verzeichnis /home zugreifen können. Kopiert nun Eure Sicherung zurück: <code><pre> cp -ar /home_save/* /home</pre></code> Zuerst sehen wir uns mal den APM Level an, der voreingestellt ist: <code><pre> root@meinepi:/# hdparm -B /dev/sda /dev/sda: APM_level = 1</pre></code> Das sieht gut aus. Solltet Ihr einen Wert gleich oder größer 128 haben, dann stellt Ihn entsprechend herunter: <code><pre> hdparm -B1 /dev/sda</pre></code> Danach legen wir noch fest, nach welcher Zeit sich die Platte schlafen legen soll. Soll das nach 5 Sekunden bereits passieren, dann gebt folgenden Befehl ein: <code><pre> hdparm -S1 /dev/sda</pre></code> Der Wert 1 steht für 5 Sekunden. D.h. bei 1 Minute (60 Sekunden) wäre es <code><pre> hdparm -S12 /dev/sda</pre></code> Bitte beachtet, dass es nicht unbedingt bei allen Platten möglich ist, diese schlafen zu legen. Ich denke mal, dass es bei den meisten neuen externen Platten schon möglich ist, aber meine Hand ins Feuer möchte ich da nicht unbedingt legen. <br><br> ==Das Datei Journaling== Was unter '''ext4''' einem in die Suppe spucken kann ist das Datei Journaling. Dieses ist natürlich wichtig was die Datensicherheit betrifft, denn deswegen wird in kurzen regelmäßigen Abschnitten auf die Platte zugegriffen und das langfristige Einschlafen verhindert. Wem das Herunterfahren der Platte wichtiger ist, muss dann den Tod sterben und das Journaling abstellen. <br><br> Um das zu erledigen muss die Platte erstmal ausgehängt werden: <code><pre> umount /dev/sdax</pre></code> (für das x bitte Eure korrekte Partitionsnummer eingeben) Danach stellen wir das Journaling ab: <code><pre> tune2fs -O ^has_journal /dev/sdax</pre></code> Prüft die Platte dann nochmal auf Fehler: <code><pre> fsck /dev/sdax</pre></code> Danach startet die Kiste einfach neu oder mountet die Platte per Hand wieder. Diese Einstellung ist permanent! Wenn Ihr das Journaling wieder einschalten wollt, dann geht das über ein <code><pre> tune2fs -O has_journal /dev/sdax</pre></code> af2e441a16f2418e1bbc0b2208509dffa4c87b70 Automatische Updates 0 235 795 2015-06-28T11:50:44Z Admin 1 Die Seite wurde neu angelegt: „Um den Raspberry automatisch zu aktualisieren, was aus sicherheitstechnischen Gründen ratsam ist, müsst Ihr das Paket '''unattended-upgrades''' installieren.…“ wikitext text/x-wiki Um den Raspberry automatisch zu aktualisieren, was aus sicherheitstechnischen Gründen ratsam ist, müsst Ihr das Paket '''unattended-upgrades''' installieren. Dieses installiert Ihr über <code><pre>apt-get install unattended-upgrades</pre></code> Danach passt Ihr unter '''/etc/apt/apt.conf.d/''' die Datei '''50unattended-upgrades''' Euren Bedürfnissen an. In der Regel sollte es nur die Ziel E-Mail Adresse sein, ich habe die Archive einwenig erweitert, da ich nicht nur die Securityupdates ziehen wollte. Der Rest ist schön in der Datei kommentiert: <code><pre>// Automatically upgrade packages from these origin patterns Unattended-Upgrade::Origins-Pattern { // Archive or Suite based matching: // Note that this will silently match a different release after // migration to the specified archive (e.g. testing becomes the // new stable). // "o=Raspbian,a=stable"; // "o=Raspbian,a=stable-updates"; // "o=Raspbian,a=proposed-updates"; // "origin=Raspbian,archive=stable,label=Raspbian-Security"; "origin=Raspbian,archive=stable"; "origin=Raspbian,archive=oldstable"; }; // List of packages to not update Unattended-Upgrade::Package-Blacklist { // "vim"; // "libc6"; // "libc6-dev"; // "libc6-i686"; }; // This option allows you to control if on a unclean dpkg exit // unattended-upgrades will automatically run // dpkg --force-confold --configure -a // The default is true, to ensure updates keep getting installed //Unattended-Upgrade::AutoFixInterruptedDpkg "false"; // Split the upgrade into the smallest possible chunks so that // they can be interrupted with SIGUSR1. This makes the upgrade // a bit slower but it has the benefit that shutdown while a upgrade // is running is possible (with a small delay) //Unattended-Upgrade::MinimalSteps "true"; // Install all unattended-upgrades when the machine is shuting down // instead of doing it in the background while the machine is running // This will (obviously) make shutdown slower //Unattended-Upgrade::InstallOnShutdown "true"; // Send email to this address for problems or packages upgrades // If empty or unset then no email is sent, make sure that you // have a working mail setup on your system. A package that provides // 'mailx' must be installed. E.g. "user@example.com" Unattended-Upgrade::Mail "meine@e.mail"; // Set this value to "true" to get emails only on errors. Default // is to always send a mail if Unattended-Upgrade::Mail is set //Unattended-Upgrade::MailOnlyOnError "true"; // Do automatic removal of new unused dependencies after the upgrade // (equivalent to apt-get autoremove) Unattended-Upgrade::Remove-Unused-Dependencies "true"; // Automatically reboot *WITHOUT CONFIRMATION* if a // the file /var/run/reboot-required is found after the upgrade //Unattended-Upgrade::Automatic-Reboot "false"; // Use apt bandwidth limit feature, this example limits the download // speed to 70kb/sec //Acquire::http::Dl-Limit "70";</pre></code> Danach legt eine neue Datei im gleichen Verzeichnis an: <code><pre>nano 02periodic</pre></code> Die füllt Ihr mit folgendem Inhalt um die Zeitsteuerung festzulegen: <code><pre>// Enable the update/upgrade script (0=disable) APT::Periodic::Enable "1"; // Do "apt-get update" automatically every n-days (0=disable) APT::Periodic::Update-Package-Lists "1"; // Do "apt-get upgrade --download-only" every n-days (0=disable) APT::Periodic::Download-Upgradeable-Packages "1"; // Run the "unattended-upgrade" security upgrade script // every n-days (0=disabled) // Requires the package "unattended-upgrades" and will write // a log in /var/log/unattended-upgrades APT::Periodic::Unattended-Upgrade "1"; // Do "apt-get autoclean" every n-days (0=disable) APT::Periodic::AutocleanInterval "7";</pre></code> Ab dann wird automatisch auf Updates geprüft und installiert, sollten welche vorhanden sein. 6089e5b3139d4338f6ca3023172c0d8435a6dbc4 Datei:Firewall.jpg 6 236 799 2015-06-28T12:20:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Owncloud installieren 0 237 801 2015-06-28T20:19:24Z Admin 1 Die Seite wurde neu angelegt: „Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der O…“ wikitext text/x-wiki Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der Owncloud ist nicht trivial und setzt schon einige Kenntnisse auf Linux voraus. Aber es hat sich gelohnt! Die Performance passt, und in der Regel greifen auf einen Heimserver nicht viele User zu. Sollen auch in der Regel nicht. Im folgenden Tutorial werden wir diese Schritte vornehmen: :# Apache Module nachinstallieren und die php.ini anpassen :# Owncloud herunterladen, installieren und Zugriffsrechte gemäß der Owncloudanleitung setzen :# http und https einrichten (nebst htaccess Schutz) Voraussetzung: :* Apache, php und mysql ist installiert :* Eine Datenbank als Root ist angelegt ==Apache Module nachinstallieren und die php.ini anpassen== Zuerst benötigen wir ein paar zusätzliche Pakete: <code><pre>apt-get install php5-curl php5-gd php5-json php5-curl php5-intl php5-mcrypt php-xml-parser</pre></code> Die '''php.ini''' wird als nächstes angepasst: Code: nano /etc/php5/apache2/php.ini</pre></code> Folgende Parameter könnt Ihr wie folgt anpassen: <code><pre>post_max_size = 2G max_file_uploads = 200 upload_max_filesize = 2G</pre></code> Speichert die Änderung und startet Euren Apache neu durch <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Owncloud herunterladen und installieren== In diesem Tutorial wollen wir die Owncloud in '''/var/www/''' installieren. Das geht natürlich überall wo Ihr wollt. Denkt daran, dass Ihr für die hochgeladenen Daten später genug Platz habt! Wir wechseln in das zukünftige Serververzeichnis: <code><pre>cd /var/www</pre></code> Nun ziehen wir uns die aktuelle Owncloud aus dem Netz: <code><pre>wget https://download.owncloud.org/community/owncloud-8.0.4.tar.bz2</pre></code> ''(Die aktuelle Versionsnummer, oder den Link bekommt Ihr hier: https://owncloud.org/install/#instructions-server )'' Entpackt die Datei mit einem <code><pre>tar xvf owncloud-8.0.4.tar.bz2</pre></code> Ihr habt nun ein neues Verzeichnis '''/var/www/owncloud'''. Wir wollen hier noch die Rechte passend setzen. Das machen wir einfach mit einen Skript: <code><pre>nano /var/www/rights.sh</pre></code> Füllt diese mit folgendem Code: <code><pre>#!/bin/bash ocpath='/var/www/owncloud' htuser='www-data' find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640 find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750 chown -R root:${htuser} ${ocpath}/ chown -R ${htuser}:${htuser} ${ocpath}/apps/ chown -R ${htuser}:${htuser} ${ocpath}/config/ chown -R ${htuser}:${htuser} ${ocpath}/data/ chown -R ${htuser}:${htuser} ${ocpath}/themes/ chown root:${htuser} ${ocpath}/.htaccess chown root:${htuser} ${ocpath}/data/.htaccess chmod 0644 ${ocpath}/.htaccess chmod 0644 ${ocpath}/data/.htaccess</pre></code> Speichert die Datei und macht diese ausführbar: <code><pre>chmod +x /var/www/rights.sh</pre></code> Diese führen wir gleich aus: <code><pre>sh /var/www/rights.sh</pre></code> Jetzt müssen wir dem Apache noch sagen, wo er unsere Webapplication findet: <br><br> ==http und https einrichten (nebst htaccess Schutz)== Der nächste Schritt ist etwas kompliziert, deswegen genau hinsehen und lesen! Als erstes hinterlegen wir den http Aufruf für die Leute, die sich es nicht merken können, dass es auch ein https gibt: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' legt Ihr folgende neue Alias an: <code><pre> Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Speichert die Änderung. Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/owncloud/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/owncloud/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> That's it! Ruft Eure Cloud nun mit <br><br> https://EURE_SERVERADRESSE/owncloud <br><br> auf. Ihr werdet jetzt aufgefordert, einen Adminuser anzulegen und eine Mysql Datenbank festzulegen. <br><br> '''Quelle:''' [http://www.owncloud.org http://www.owncloud.org] 052d85cd683f41f5a4f0429a8219269c2369c2a0 Mediawiki installieren und nutzen 0 238 804 2015-06-28T20:21:22Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:cent…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbankuser User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen VErsion an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R www-data:www-data /var/www/mediawiki</pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/owncloud> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br><br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 07e37ab5f2ad55c79a38c4d73e26465a733c8d54 818 804 2015-06-28T20:29:46Z Admin 1 /* Apache 2 konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbankuser User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen VErsion an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R www-data:www-data /var/www/mediawiki</pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br><br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> bc6e59b509033a6d5eaa8b8f33dcfa112a95f85d 819 818 2015-06-28T20:31:24Z Admin 1 /* Eine leere Datenbank anlegen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen VErsion an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R www-data:www-data /var/www/mediawiki</pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br><br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 630b167b0539b3d7440f5c52c7d94a4c8aae1d64 820 819 2015-06-29T05:30:23Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen VErsion an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R www-data:www-data /var/www/mediawiki</pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> b4c43b6eb6c8623284f7b0fe79d5739927dee33f Datei:Mediawiki logo.jpg 6 239 805 2015-06-28T20:21:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 01.jpg 6 240 806 2015-06-28T20:21:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 02.jpg 6 241 807 2015-06-28T20:22:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 03.jpg 6 242 808 2015-06-28T20:22:27Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 04.jpg 6 243 809 2015-06-28T20:22:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 05.jpg 6 244 810 2015-06-28T20:23:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 06.jpg 6 245 811 2015-06-28T20:23:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 07.jpg 6 246 812 2015-06-28T20:23:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 08.jpg 6 247 813 2015-06-28T20:24:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 09.jpg 6 248 814 2015-06-28T20:24:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 10.jpg 6 249 815 2015-06-28T20:24:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wiki 11.jpg 6 250 816 2015-06-28T20:25:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Mobil.jpg 6 251 817 2015-06-28T20:25:27Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mediawiki installieren und nutzen 0 238 821 820 2015-06-29T21:49:50Z Admin 1 /* Mediawiki downloaden, entpacken und vorbereiten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R www-data:www-data /var/www/mediawiki</pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> cc568e70a4ef0e420d13ffb0b651bf3703fdb401 823 821 2015-06-29T23:12:24Z Admin 1 /* Apache 2 konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R www-data:www-data /var/www/mediawiki</pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI -Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 9458ab6afd69cb9ea17cc76e402be406f6279e14 824 823 2015-06-29T23:35:20Z Admin 1 /* Mediawiki downloaden, entpacken und vorbereiten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI -Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 55d7580cfd014238cde7448f2f3c7c87b4183dde 826 824 2015-06-30T05:40:16Z Admin 1 /* Apache 2 konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> dd4060f16742cd0f13df623222c4fbfd3700d69d 828 826 2015-06-30T05:45:34Z Admin 1 /* Apache 2 konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/mediawiki <Directory /var/www/mediawiki> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 78d84e29da6ac126fc4209a36c18eec03b4cc79b 829 828 2015-06-30T06:08:08Z Admin 1 /* https einrichten (nebst htaccess Schutz) */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> f0270f173c86346f60019c8e66a7d5361dd2c3d5 830 829 2015-06-30T06:08:58Z Admin 1 /* https einrichten (nebst htaccess Schutz) */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 2437cf04b0b64f988b36fb14e17f067a80717412 831 830 2015-06-30T06:09:28Z Admin 1 /* Apache 2 konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> be2bed4a5d51df02ec6acda5bd00d0a59b7e3ad1 837 831 2015-07-01T20:21:59Z Admin 1 /* Erste Schritte */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/wikimedia''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Inhaltsverzeichnis unterdrücken=== Bei mehr als 3 Überschriften wird automatisch ein Inhaltsverzeichnis angelegt. Dieses kann mit dem Code <code><pre>__NOTOC__</pre></code> unterbunden werden. <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> f118691bc4c716e6aa3ee5516b507a10487fe49a 838 837 2015-07-01T20:23:31Z Admin 1 /* Apache 2 konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/mediawiki''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown www-data:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Inhaltsverzeichnis unterdrücken=== Bei mehr als 3 Überschriften wird automatisch ein Inhaltsverzeichnis angelegt. Dieses kann mit dem Code <code><pre>__NOTOC__</pre></code> unterbunden werden. <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 0d187320b4aefa3429039413eeed424183b0c9bb 839 838 2015-07-01T20:30:30Z Admin 1 /* Mediawiki einrichten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/mediawiki''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown root:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Inhaltsverzeichnis unterdrücken=== Bei mehr als 3 Überschriften wird automatisch ein Inhaltsverzeichnis angelegt. Dieses kann mit dem Code <code><pre>__NOTOC__</pre></code> unterbunden werden. <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 976a367f1edb07bc2819007e74155913b27ac08b 858 839 2015-10-11T14:16:59Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/mediawiki''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown root:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki//index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Inhaltsverzeichnis unterdrücken=== Bei mehr als 3 Überschriften wird automatisch ein Inhaltsverzeichnis angelegt. Dieses kann mit dem Code <code><pre>__NOTOC__</pre></code> unterbunden werden. <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Mediawiki updaten== Bevor Ihr Euere Mediawiki updatet, sichert Eure Datenbank und macht am besten eine Kopie Eures mediawiki Verzeichnisses. Dann ladet einfach das aktuelle Installationspaket herunte, entpackt den Tarball und kopiert diesen über Eure Installation. Passt dann wie in dem Tutorial hier beschrieben die Zugriffsberechtigungen an. Danach wechselt auf der Konsole in das '''maintenance''' Verzeichnis und führt das Update aus: <code><pre>php update.php</pre></code> Nach dem Update prüft die Datenbank auf Fehler: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT Datenbankname</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT Datenbankname --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 431589de09f4b6e31314e957dfc1a709a4347be6 Owncloud installieren 0 237 822 801 2015-06-29T23:12:03Z Admin 1 /* http und https einrichten (nebst htaccess Schutz) */ wikitext text/x-wiki Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der Owncloud ist nicht trivial und setzt schon einige Kenntnisse auf Linux voraus. Aber es hat sich gelohnt! Die Performance passt, und in der Regel greifen auf einen Heimserver nicht viele User zu. Sollen auch in der Regel nicht. Im folgenden Tutorial werden wir diese Schritte vornehmen: :# Apache Module nachinstallieren und die php.ini anpassen :# Owncloud herunterladen, installieren und Zugriffsrechte gemäß der Owncloudanleitung setzen :# http und https einrichten (nebst htaccess Schutz) Voraussetzung: :* Apache, php und mysql ist installiert :* Eine Datenbank als Root ist angelegt ==Apache Module nachinstallieren und die php.ini anpassen== Zuerst benötigen wir ein paar zusätzliche Pakete: <code><pre>apt-get install php5-curl php5-gd php5-json php5-curl php5-intl php5-mcrypt php-xml-parser</pre></code> Die '''php.ini''' wird als nächstes angepasst: Code: nano /etc/php5/apache2/php.ini</pre></code> Folgende Parameter könnt Ihr wie folgt anpassen: <code><pre>post_max_size = 2G max_file_uploads = 200 upload_max_filesize = 2G</pre></code> Speichert die Änderung und startet Euren Apache neu durch <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Owncloud herunterladen und installieren== In diesem Tutorial wollen wir die Owncloud in '''/var/www/''' installieren. Das geht natürlich überall wo Ihr wollt. Denkt daran, dass Ihr für die hochgeladenen Daten später genug Platz habt! Wir wechseln in das zukünftige Serververzeichnis: <code><pre>cd /var/www</pre></code> Nun ziehen wir uns die aktuelle Owncloud aus dem Netz: <code><pre>wget https://download.owncloud.org/community/owncloud-8.0.4.tar.bz2</pre></code> ''(Die aktuelle Versionsnummer, oder den Link bekommt Ihr hier: https://owncloud.org/install/#instructions-server )'' Entpackt die Datei mit einem <code><pre>tar xvf owncloud-8.0.4.tar.bz2</pre></code> Ihr habt nun ein neues Verzeichnis '''/var/www/owncloud'''. Wir wollen hier noch die Rechte passend setzen. Das machen wir einfach mit einen Skript: <code><pre>nano /var/www/rights.sh</pre></code> Füllt diese mit folgendem Code: <code><pre>#!/bin/bash ocpath='/var/www/owncloud' htuser='www-data' find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640 find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750 chown -R root:${htuser} ${ocpath}/ chown -R ${htuser}:${htuser} ${ocpath}/apps/ chown -R ${htuser}:${htuser} ${ocpath}/config/ chown -R ${htuser}:${htuser} ${ocpath}/data/ chown -R ${htuser}:${htuser} ${ocpath}/themes/ chown root:${htuser} ${ocpath}/.htaccess chown root:${htuser} ${ocpath}/data/.htaccess chmod 0644 ${ocpath}/.htaccess chmod 0644 ${ocpath}/data/.htaccess</pre></code> Speichert die Datei und macht diese ausführbar: <code><pre>chmod +x /var/www/rights.sh</pre></code> Diese führen wir gleich aus: <code><pre>sh /var/www/rights.sh</pre></code> Jetzt müssen wir dem Apache noch sagen, wo er unsere Webapplication findet: <br><br> ==http und https einrichten (nebst htaccess Schutz)== Der nächste Schritt ist etwas kompliziert, deswegen genau hinsehen und lesen! Als erstes hinterlegen wir den http Aufruf für die Leute, die sich es nicht merken können, dass es auch ein https gibt: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' legt Ihr folgende neue Alias an: <code><pre> Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options ExecCGI -Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Speichert die Änderung. Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options ExecCGI -Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/owncloud/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/owncloud/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> That's it! Ruft Eure Cloud nun mit <br><br> https://EURE_SERVERADRESSE/owncloud <br><br> auf. Ihr werdet jetzt aufgefordert, einen Adminuser anzulegen und eine Mysql Datenbank festzulegen. <br><br> '''Quelle:''' [http://www.owncloud.org http://www.owncloud.org] bc3d3e8791b2392b58ef625a8b377464933c175e 825 822 2015-06-30T05:38:35Z Admin 1 /* http und https einrichten (nebst htaccess Schutz) */ wikitext text/x-wiki Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der Owncloud ist nicht trivial und setzt schon einige Kenntnisse auf Linux voraus. Aber es hat sich gelohnt! Die Performance passt, und in der Regel greifen auf einen Heimserver nicht viele User zu. Sollen auch in der Regel nicht. Im folgenden Tutorial werden wir diese Schritte vornehmen: :# Apache Module nachinstallieren und die php.ini anpassen :# Owncloud herunterladen, installieren und Zugriffsrechte gemäß der Owncloudanleitung setzen :# http und https einrichten (nebst htaccess Schutz) Voraussetzung: :* Apache, php und mysql ist installiert :* Eine Datenbank als Root ist angelegt ==Apache Module nachinstallieren und die php.ini anpassen== Zuerst benötigen wir ein paar zusätzliche Pakete: <code><pre>apt-get install php5-curl php5-gd php5-json php5-curl php5-intl php5-mcrypt php-xml-parser</pre></code> Die '''php.ini''' wird als nächstes angepasst: Code: nano /etc/php5/apache2/php.ini</pre></code> Folgende Parameter könnt Ihr wie folgt anpassen: <code><pre>post_max_size = 2G max_file_uploads = 200 upload_max_filesize = 2G</pre></code> Speichert die Änderung und startet Euren Apache neu durch <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Owncloud herunterladen und installieren== In diesem Tutorial wollen wir die Owncloud in '''/var/www/''' installieren. Das geht natürlich überall wo Ihr wollt. Denkt daran, dass Ihr für die hochgeladenen Daten später genug Platz habt! Wir wechseln in das zukünftige Serververzeichnis: <code><pre>cd /var/www</pre></code> Nun ziehen wir uns die aktuelle Owncloud aus dem Netz: <code><pre>wget https://download.owncloud.org/community/owncloud-8.0.4.tar.bz2</pre></code> ''(Die aktuelle Versionsnummer, oder den Link bekommt Ihr hier: https://owncloud.org/install/#instructions-server )'' Entpackt die Datei mit einem <code><pre>tar xvf owncloud-8.0.4.tar.bz2</pre></code> Ihr habt nun ein neues Verzeichnis '''/var/www/owncloud'''. Wir wollen hier noch die Rechte passend setzen. Das machen wir einfach mit einen Skript: <code><pre>nano /var/www/rights.sh</pre></code> Füllt diese mit folgendem Code: <code><pre>#!/bin/bash ocpath='/var/www/owncloud' htuser='www-data' find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640 find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750 chown -R root:${htuser} ${ocpath}/ chown -R ${htuser}:${htuser} ${ocpath}/apps/ chown -R ${htuser}:${htuser} ${ocpath}/config/ chown -R ${htuser}:${htuser} ${ocpath}/data/ chown -R ${htuser}:${htuser} ${ocpath}/themes/ chown root:${htuser} ${ocpath}/.htaccess chown root:${htuser} ${ocpath}/data/.htaccess chmod 0644 ${ocpath}/.htaccess chmod 0644 ${ocpath}/data/.htaccess</pre></code> Speichert die Datei und macht diese ausführbar: <code><pre>chmod +x /var/www/rights.sh</pre></code> Diese führen wir gleich aus: <code><pre>sh /var/www/rights.sh</pre></code> Jetzt müssen wir dem Apache noch sagen, wo er unsere Webapplication findet: <br><br> ==http und https einrichten (nebst htaccess Schutz)== Der nächste Schritt ist etwas kompliziert, deswegen genau hinsehen und lesen! Als erstes hinterlegen wir den http Aufruf für die Leute, die sich es nicht merken können, dass es auch ein https gibt: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' legt Ihr folgende neue Alias an: <code><pre> Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Speichert die Änderung. Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/owncloud/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/owncloud/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> That's it! Ruft Eure Cloud nun mit <br><br> https://EURE_SERVERADRESSE/owncloud <br><br> auf. Ihr werdet jetzt aufgefordert, einen Adminuser anzulegen und eine Mysql Datenbank festzulegen. <br><br> '''Quelle:''' [http://www.owncloud.org http://www.owncloud.org] 21491377355d38dc6a2903af64b427818447f7dc 832 825 2015-06-30T22:33:57Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div> Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der Owncloud ist nicht trivial und setzt schon einige Kenntnisse auf Linux voraus. Aber es hat sich gelohnt! Die Performance passt, und in der Regel greifen auf einen Heimserver nicht viele User zu. Sollen auch in der Regel nicht. Im folgenden Tutorial werden wir diese Schritte vornehmen: :# Apache Module nachinstallieren und die php.ini anpassen :# Owncloud herunterladen, installieren und Zugriffsrechte gemäß der Owncloudanleitung setzen :# http und https einrichten (nebst htaccess Schutz) Voraussetzung: :* Apache, php und mysql ist installiert :* Eine Datenbank als Root ist angelegt ==Apache Module nachinstallieren und die php.ini anpassen== Zuerst benötigen wir ein paar zusätzliche Pakete: <code><pre>apt-get install php5-curl php5-gd php5-json php5-curl php5-intl php5-mcrypt php-xml-parser</pre></code> Die '''php.ini''' wird als nächstes angepasst: <code><pre> nano /etc/php5/apache2/php.ini</pre></code> Folgende Parameter könnt Ihr wie folgt anpassen: <code><pre>post_max_size = 2G max_file_uploads = 200 upload_max_filesize = 2G</pre></code> Speichert die Änderung und startet Euren Apache neu durch <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Owncloud herunterladen und installieren== In diesem Tutorial wollen wir die Owncloud in '''/var/www/''' installieren. Das geht natürlich überall wo Ihr wollt. Denkt daran, dass Ihr für die hochgeladenen Daten später genug Platz habt! Wir wechseln in das zukünftige Serververzeichnis: <code><pre>cd /var/www</pre></code> Nun ziehen wir uns die aktuelle Owncloud aus dem Netz: <code><pre>wget https://download.owncloud.org/community/owncloud-8.0.4.tar.bz2</pre></code> ''(Die aktuelle Versionsnummer, oder den Link bekommt Ihr hier: https://owncloud.org/install/#instructions-server )'' Entpackt die Datei mit einem <code><pre>tar xvf owncloud-8.0.4.tar.bz2</pre></code> Ihr habt nun ein neues Verzeichnis '''/var/www/owncloud'''. Wir wollen hier noch die Rechte passend setzen. Das machen wir einfach mit einen Skript: <code><pre>nano /var/www/rights.sh</pre></code> Füllt diese mit folgendem Code: <code><pre>#!/bin/bash ocpath='/var/www/owncloud' htuser='www-data' find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640 find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750 chown -R root:${htuser} ${ocpath}/ chown -R ${htuser}:${htuser} ${ocpath}/apps/ chown -R ${htuser}:${htuser} ${ocpath}/config/ chown -R ${htuser}:${htuser} ${ocpath}/data/ chown -R ${htuser}:${htuser} ${ocpath}/themes/ chown root:${htuser} ${ocpath}/.htaccess chown root:${htuser} ${ocpath}/data/.htaccess chmod 0644 ${ocpath}/.htaccess chmod 0644 ${ocpath}/data/.htaccess</pre></code> Speichert die Datei und macht diese ausführbar: <code><pre>chmod +x /var/www/rights.sh</pre></code> Diese führen wir gleich aus: <code><pre>sh /var/www/rights.sh</pre></code> Jetzt müssen wir dem Apache noch sagen, wo er unsere Webapplication findet: <br><br> ==http und https einrichten (nebst htaccess Schutz)== Der nächste Schritt ist etwas kompliziert, deswegen genau hinsehen und lesen! Als erstes hinterlegen wir den http Aufruf für die Leute, die sich es nicht merken können, dass es auch ein https gibt: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' legt Ihr folgende neue Alias an: <code><pre> Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Speichert die Änderung. Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/owncloud/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/owncloud/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> That's it! Ruft Eure Cloud nun mit <br><br> https://EURE_SERVERADRESSE/owncloud <br><br> auf. Ihr werdet jetzt aufgefordert, einen Adminuser anzulegen und eine Mysql Datenbank festzulegen. <br><br> '''Quelle:''' [http://www.owncloud.org http://www.owncloud.org] 9e525cff80043ed3834ce2219e3f2bddf5adf359 854 832 2015-08-22T12:49:41Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div> Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der Owncloud ist nicht trivial und setzt schon einige Kenntnisse auf Linux voraus. Aber es hat sich gelohnt! Die Performance passt, und in der Regel greifen auf einen Heimserver nicht viele User zu. Sollen auch in der Regel nicht. Im folgenden Tutorial werden wir diese Schritte vornehmen: :# Apache Module nachinstallieren und die php.ini anpassen :# Owncloud herunterladen, installieren und Zugriffsrechte gemäß der Owncloudanleitung setzen :# http und https einrichten (nebst htaccess Schutz) Voraussetzung: :* Apache, php und mysql ist installiert :* Eine Datenbank als Root ist angelegt ==Apache Module nachinstallieren und die php.ini anpassen== Zuerst benötigen wir ein paar zusätzliche Pakete: <code><pre>apt-get install php5-curl php5-gd php5-json php5-curl php5-intl php5-mcrypt php-xml-parser</pre></code> Die '''php.ini''' wird als nächstes angepasst: <code><pre> nano /etc/php5/apache2/php.ini</pre></code> Folgende Parameter könnt Ihr wie folgt anpassen: <code><pre>post_max_size = 2G max_file_uploads = 200 upload_max_filesize = 2G</pre></code> Speichert die Änderung und startet Euren Apache neu durch <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Owncloud herunterladen und installieren== In diesem Tutorial wollen wir die Owncloud in '''/var/www/''' installieren. Das geht natürlich überall wo Ihr wollt. Denkt daran, dass Ihr für die hochgeladenen Daten später genug Platz habt! Wir wechseln in das zukünftige Serververzeichnis: <code><pre>cd /var/www</pre></code> Nun ziehen wir uns die aktuelle Owncloud aus dem Netz: <code><pre>wget https://download.owncloud.org/community/owncloud-8.0.4.tar.bz2</pre></code> ''(Die aktuelle Versionsnummer, oder den Link bekommt Ihr hier: https://owncloud.org/install/#instructions-server )'' Entpackt die Datei mit einem <code><pre>tar xvf owncloud-8.0.4.tar.bz2</pre></code> Ihr habt nun ein neues Verzeichnis '''/var/www/owncloud'''. Wir wollen hier noch die Rechte passend setzen. Das machen wir einfach mit einen Skript: <code><pre>nano /var/www/rights.sh</pre></code> Füllt diese mit folgendem Code: <code><pre>#!/bin/bash ocpath='/var/www/owncloud' htuser='www-data' find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640 find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750 chown -R root:${htuser} ${ocpath}/ chown -R ${htuser}:${htuser} ${ocpath}/apps/ chown -R ${htuser}:${htuser} ${ocpath}/config/ chown -R ${htuser}:${htuser} ${ocpath}/data/ chown -R ${htuser}:${htuser} ${ocpath}/themes/ chown root:${htuser} ${ocpath}/.htaccess chown root:${htuser} ${ocpath}/data/.htaccess chmod 0644 ${ocpath}/.htaccess chmod 0644 ${ocpath}/data/.htaccess</pre></code> Speichert die Datei und macht diese ausführbar: <code><pre>chmod +x /var/www/rights.sh</pre></code> Diese führen wir gleich aus: <code><pre>sh /var/www/rights.sh</pre></code> Jetzt müssen wir dem Apache noch sagen, wo er unsere Webapplication findet: <br><br> ==http und https einrichten (nebst htaccess Schutz)== Der nächste Schritt ist etwas kompliziert, deswegen genau hinsehen und lesen! Als erstes hinterlegen wir den http Aufruf für die Leute, die sich es nicht merken können, dass es auch ein https gibt: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' legt Ihr folgende neue Alias an: <code><pre> Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Speichert die Änderung. Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/owncloud/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/owncloud/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> That's it! Ruft Eure Cloud nun mit <br><br> https://EURE_SERVERADRESSE/owncloud <br><br> auf. Ihr werdet jetzt aufgefordert, einen Adminuser anzulegen und eine Mysql Datenbank festzulegen. <br><br> ==Owncloud aktualisieren== Wenn Ihr einen Hinweis auf eine neue Version bekommt, dann lässt sich diese recht schnell installieren. Dies geht in folgenden Schritten: :# Sichert zuerst Eure Installation. Hierzu am besten das Verzeichnis auf Eurem Server umbenennen :# Bleibt in Eurem Serververzeichnis und ladet Euch mittels '''wget''' wie in meinem Tutorial hier beschrieben die neue Version herunter. Entpackt das tar.gz mittels '''tar''' (siehe oben). :# Kopiert das '''data''' Verzeichnis von Eurer Sicherung in das neue owncloud Verzeichnis. :# Führt wie in meinem Tutorial das '''rights.sh''' Skript aus, um die Verzeichnisrechte neu zu setzen. :# Ruft Eure owncloud nun im Browser auf. Jetzt müsst Ihr die Datenbank aktualisieren lassen. Das wird Euch im Browser entsprechend angezeigt. Habt hier einwenig Geduld, der Vorgang kann hier etwas dauern. :# Falls Ihr im Stammverzeichnis eine eigene .htaccess angelegt habt, dann kopiert diese nun aus Eurem Sicherungsverzeichnis zurück. Führt danach nochmals das '''rights.sh''' Skript aus. Das war es soweit. Danach ist Eure Owncloud auf dem neuesten Stand gebracht. <br><br> '''Quelle:''' [http://www.owncloud.org http://www.owncloud.org] 6d3492b2f99c76e8de8b41aac4386146a455a8cd 856 854 2015-10-11T10:14:34Z Admin 1 /* Owncloud aktualisieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div> Da der Raspberry Pi 2 doch mehr Dampf unter der Haube hat, war es mal interessant auszuprobieren, wie sie mit einer Cloud zurecht kommt. Die Installation der Owncloud ist nicht trivial und setzt schon einige Kenntnisse auf Linux voraus. Aber es hat sich gelohnt! Die Performance passt, und in der Regel greifen auf einen Heimserver nicht viele User zu. Sollen auch in der Regel nicht. Im folgenden Tutorial werden wir diese Schritte vornehmen: :# Apache Module nachinstallieren und die php.ini anpassen :# Owncloud herunterladen, installieren und Zugriffsrechte gemäß der Owncloudanleitung setzen :# http und https einrichten (nebst htaccess Schutz) Voraussetzung: :* Apache, php und mysql ist installiert :* Eine Datenbank als Root ist angelegt ==Apache Module nachinstallieren und die php.ini anpassen== Zuerst benötigen wir ein paar zusätzliche Pakete: <code><pre>apt-get install php5-curl php5-gd php5-json php5-curl php5-intl php5-mcrypt php-xml-parser</pre></code> Die '''php.ini''' wird als nächstes angepasst: <code><pre> nano /etc/php5/apache2/php.ini</pre></code> Folgende Parameter könnt Ihr wie folgt anpassen: <code><pre>post_max_size = 2G max_file_uploads = 200 upload_max_filesize = 2G</pre></code> Speichert die Änderung und startet Euren Apache neu durch <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Owncloud herunterladen und installieren== In diesem Tutorial wollen wir die Owncloud in '''/var/www/''' installieren. Das geht natürlich überall wo Ihr wollt. Denkt daran, dass Ihr für die hochgeladenen Daten später genug Platz habt! Wir wechseln in das zukünftige Serververzeichnis: <code><pre>cd /var/www</pre></code> Nun ziehen wir uns die aktuelle Owncloud aus dem Netz: <code><pre>wget https://download.owncloud.org/community/owncloud-8.0.4.tar.bz2</pre></code> ''(Die aktuelle Versionsnummer, oder den Link bekommt Ihr hier: https://owncloud.org/install/#instructions-server )'' Entpackt die Datei mit einem <code><pre>tar xvf owncloud-8.0.4.tar.bz2</pre></code> Ihr habt nun ein neues Verzeichnis '''/var/www/owncloud'''. Wir wollen hier noch die Rechte passend setzen. Das machen wir einfach mit einen Skript: <code><pre>nano /var/www/rights.sh</pre></code> Füllt diese mit folgendem Code: <code><pre>#!/bin/bash ocpath='/var/www/owncloud' htuser='www-data' find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640 find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750 chown -R root:${htuser} ${ocpath}/ chown -R ${htuser}:${htuser} ${ocpath}/apps/ chown -R ${htuser}:${htuser} ${ocpath}/config/ chown -R ${htuser}:${htuser} ${ocpath}/data/ chown -R ${htuser}:${htuser} ${ocpath}/themes/ chown root:${htuser} ${ocpath}/.htaccess chown root:${htuser} ${ocpath}/data/.htaccess chmod 0644 ${ocpath}/.htaccess chmod 0644 ${ocpath}/data/.htaccess</pre></code> Speichert die Datei und macht diese ausführbar: <code><pre>chmod +x /var/www/rights.sh</pre></code> Diese führen wir gleich aus: <code><pre>sh /var/www/rights.sh</pre></code> Jetzt müssen wir dem Apache noch sagen, wo er unsere Webapplication findet: <br><br> ==http und https einrichten (nebst htaccess Schutz)== Der nächste Schritt ist etwas kompliziert, deswegen genau hinsehen und lesen! Als erstes hinterlegen wir den http Aufruf für die Leute, die sich es nicht merken können, dass es auch ein https gibt: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' legt Ihr folgende neue Alias an: <code><pre> Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Speichert die Änderung. Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /owncloud /var/www/owncloud <Directory /var/www/owncloud> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/owncloud/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName owncloud AuthUserFile /var/www/owncloud/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> That's it! Ruft Eure Cloud nun mit <br><br> https://EURE_SERVERADRESSE/owncloud <br><br> auf. Ihr werdet jetzt aufgefordert, einen Adminuser anzulegen und eine Mysql Datenbank festzulegen. <br><br> ==Owncloud aktualisieren== Wenn Ihr einen Hinweis auf eine neue Version bekommt, dann lässt sich diese recht schnell installieren. Dies geht in folgenden Schritten: :# Sichert zuerst Eure Installation. Hierzu am besten das Verzeichnis auf Eurem Server umbenennen :# Bleibt in Eurem Serververzeichnis und ladet Euch mittels '''wget''' wie in meinem Tutorial hier beschrieben die neue Version herunter. Entpackt das tar.gz mittels '''tar''' (siehe oben). :# Kopiert das '''data''' Verzeichnis von Eurer Sicherung in das neue owncloud Verzeichnis. :# Kopiert die '''config.php''' aus dem '''config''' Verzeichnis Eurer Sicherung in das neue '''owncloud/config/''' Verzeichnis. :# Führt wie in meinem Tutorial das '''rights.sh''' Skript aus, um die Verzeichnisrechte neu zu setzen. :# Ruft Eure owncloud nun im Browser auf. Jetzt müsst Ihr die Datenbank aktualisieren lassen. Das wird Euch im Browser entsprechend angezeigt. Habt hier einwenig Geduld, der Vorgang kann hier etwas dauern. :# Falls Ihr im Stammverzeichnis eine eigene .htaccess angelegt habt, dann kopiert diese nun aus Eurem Sicherungsverzeichnis zurück. Führt danach nochmals das '''rights.sh''' Skript aus. Das war es soweit. Danach ist Eure Owncloud auf dem neuesten Stand gebracht. <br><br> '''Quelle:''' [http://www.owncloud.org http://www.owncloud.org] 7d493ee243c6c5df5ebdd28918ec54acb7b574d0 Phpmyadmin installieren 0 97 827 110 2015-06-30T05:41:33Z Admin 1 wikitext text/x-wiki Der [http://www.phpmyadmin.net/home_page/index.php phpmyadmin] ist unter Debian fix installiert. Ich gehe davon aus, dass Ihr bereits einen Apache2, php5 und mysql5 am Laufen habt. Danach setzt als root folgenden Befehl ab: <code><pre>apt-get install phpmyadmin</pre></code> Nach erfolgreicher Installation könnt Ihr den phpmyadmin schon aufrufen. Dazu in Eurem Browser <code><pre>http://meineurl/phpadmin</pre></code> eingeben.<br> <br> Im Grunde könnte man das jetzt auch schon so lassen, nur würde ich nun noch ein paar Dinge umbiegen bzw. ergänzen. Da der phpmyadmin als Standard immer unter /phpmyadmin aufzurufen ist, verleitet es vielleicht mal den einen oder anderen Cracker zu versuchen, darüber an die Datenbank zu kommen. Von daher wäre es ratsam, das Standardverzeichnis umzubenennen und eventuell nochmals über ein htaccess passwortgeschützt zu schalten. Zwar muss man sich über den phpmyadmin auch anmelden, nur wer dann noch den Fail2ban am Laufen hat, der sperrt hier schnell auch die Bruteforce Attacken aus, falls es sich jemand am htaccess versuchen will.<br> <br> Also legen wir noch ein htaccess Login an und verstellen die Standard-URL.<br> <br> '''Standard URL ändern:'''<br> <br> Der phpmyadmin wird nicht einfach in einem neuen Unterverzeichnis im Dokumenten Root des Apache abgelegt, sondern findet sich innerhalb /usr/share/phpmyadmin . Damit der Apache das entsprechend umlinkt muss das auch in einer eigenen Konfig festgelegt werden. Deswegen müsst Ihr zunächst diese editieren: <code><pre>nano /etc/apache2/conf.d/phpmyadmin.conf</pre></code> Der Alias muss entsprechend Euren Vorstellungen geändert werden: <code><pre># phpMyAdmin default Apache configuration Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options FollowSymLinks [...]</pre></code> Z.b. in "'''meinedatenbank'''" . Das würde dann so aussehen: <code><pre># phpMyAdmin default Apache configuration Alias /meinedatenbank /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options FollowSymLinks [...]</pre></code> Startet den Apache neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Nun könnt Ihr phpmyadmin z.B. mit <code><pre>http://meineurl/meinedatenbank</pre></code> aufrufen.<br> <br> '''htaccess hinzufügen:'''<br> <br> Hierfür muss wieder die phpmyadmin.conf angepasst werden: <code><pre>nano /etc/apache2/conf.d/phpmyadmin.conf</pre></code> Fügt nun die '''AllowOverride All''' Zeile ein: <code><pre><Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All # Authorize for setup <Files setup.php> [...]</pre></code> Wechselt nun in das phpmyadmin Verzeichnis: <code><pre>cd /usr/share/phpmyadmin</pre></code> und legt eine neue Datei an: <code><pre>nano .htaccess</pre></code> und füllt diese gleich mit folgendem Inhalt: <code><pre>AuthType Basic AuthName phpmyadmin AuthUserFile /usr/share/phpmyadmin/.htpasswd require valid-user</pre></code> Jetzt legt die Passwortdatei an: <code><pre>htpasswd -c .htpasswd username</pre></code> ''(für username Euren gewünschten Usernamen)''<br> <br> Danach das Passwort eingeben und bestätigen wenn Ihr abgefragt werdet.<br> <br> '''Sicherheitstipp:''' Ihr könnt die Passwortdatei auch außerhalb des /usr/share/phpmyadmin Verzeichnisses legen, müsst dies aber dann entsprechend auch in der .htaccess angeben.<br> <br> Danach einfach den Apache neu starten: <code><pre>/etc/init.d/apache2 restart</pre></code> Jetzt werdet Ihr erstmal nach einem Login gefragt, bevor Ihr Euch im phpmyadmin anmelden könnt.<br> <br> '''Neuen Datenbankuser mittels phpmyadmin anlegen:'''<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:phpmyadmin_01.jpg|phpmyadmin1]] </div> Es ist ratsam, dass Ihr wenn Ihr später ein CMS, Forum, Blog installiert, nicht über den Root-Account der mysql Datenbank arbeitet, sondern über einen eigenen User. Den könnt Ihr recht einfach selbst unter phpmyadmin anlegen. Loggt Euch dazu als php - root ein und klickt auf der Startseite gleich auf "Rechte" wie hier im linken Bild rot dargestellt wird. <br> <br> An der Stelle könnt Ihr auch für jeden bereits aqngelegten Datenbankuser die Rechte im Naqchgang individuell anpassen.<br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:phpmyadmin_02.jpg|phpmyadmin2]] </div><br> Im unteren Teil der Maske klickt einfach dann auf "Neuen Benutzer hinzufügen". Danach erhaltet Ihr folgende Eingabemöglichkeit in der Ihr den Namen des Nutzers, den Server (normalerweise "localhost") und das neue Passwort des frisch angelegten Users eingebt. Verwendet hierfür kryptische Passwörter (also Buchstaben, Sonderzeichen, Zahlen), da Datenbanken gerne angegriffen werden. <br><br><br> [[Bild:phpmyadmin_03.jpg|phpmyadmin3]]<br> Eine neue Datenbank legen wir mal nicht an, das machen wir später als User.<br> <br> Bei den Rechten wählt folgendes aus:<br> [[Bild:phpmyadmin_04.jpg|phpmyadmin4]]<br> Das dürfte das wichtigste abdecken. <br> <br> Speichert die Einstellungen ab. Nun könnt Ihr Euch als neuer Nutzer einloggen und neue Datenbanken anlegen. Wenn Ihr keine Datenbankenlimitierung habt (was auf einen privaten Server normal nicht der Fall ist), dann empfiehlt es sich auch, für jedes CMS, Blog oder Forum auch eine eigene Datenbank anzulegen. Das ist zum einen übersichtlicher und ressourcenschonender, wenn die Datenbanken mal etwas größer werden sollten.<br> <br> Viele Grüße!<br> Euer<br> Gargi 08bff126247bb49bdd77e9bcea9c41b796f8fe6e Proftp installieren 0 94 833 105 2015-07-01T20:05:24Z Admin 1 wikitext text/x-wiki ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch die proftpd.conf bearbeiten. Unter Debian Sarge befindet diese sich im Verzeichnis '''/etc'''. Bei Etch und Lenny im Verzeichnis '''/etc/proftpd'''.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Verbindung mittels TLS sichern== Openssl sollte hierzu installiert sein: <code><pre>apt-get install ssl-cert make-ssl-cert generate-default-snakeoil --force-overwrite</pre></code> Legt dann die '''tls.conf''' an: <code><pre>nano /etc/proftpd/conf.d/tls.conf</pre></code> Und füllt diese mit folgenden code: <code><pre><IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule></pre></code> Wenn Ihr eine Firewall am Server betreibt, muss noch eine TCP_IN Range als Passive Ports festgelegt werden. Diese Range (in einem sehr hohen Bereich und nur einige wenige Ports) tragt in der '''/etc/proftpd/proftpd.conf''' beim Parameter <code><pre>PassivePorts XXXXXX XXXXXX</pre></code> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Fehlermeldung memcache beim proftp start== Um die Fehlermeldung zu unterbinden, stellt das memcache Modul ab: <code><pre>nano /etc/proftpd/modules.conf</pre></code> Kommentiert die folgende Zeile aus: <br><br> '''LoadModule mod_tls_memcache.c''' <br><br> in <br><br> '''#LoadModule mod_tls_memcache.c''' <br><br> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> e345f209036195bdfef90df156b46e102a3869a8 834 833 2015-07-01T20:07:17Z Admin 1 wikitext text/x-wiki __NOTOC__ ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch die proftpd.conf bearbeiten. Unter Debian Sarge befindet diese sich im Verzeichnis '''/etc'''. Bei Etch und Lenny im Verzeichnis '''/etc/proftpd'''.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Verbindung mittels TLS sichern== Openssl sollte hierzu installiert sein: <code><pre>apt-get install ssl-cert make-ssl-cert generate-default-snakeoil --force-overwrite</pre></code> Legt dann die '''tls.conf''' an: <code><pre>nano /etc/proftpd/conf.d/tls.conf</pre></code> Und füllt diese mit folgenden code: <code><pre><IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule></pre></code> Wenn Ihr eine Firewall am Server betreibt, muss noch eine TCP_IN Range als Passive Ports festgelegt werden. Diese Range (in einem sehr hohen Bereich und nur einige wenige Ports) tragt in der '''/etc/proftpd/proftpd.conf''' beim Parameter <code><pre>PassivePorts XXXXXX XXXXXX</pre></code> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Fehlermeldung memcache beim proftp start== Um die Fehlermeldung zu unterbinden, stellt das memcache Modul ab: <code><pre>nano /etc/proftpd/modules.conf</pre></code> Kommentiert die folgende Zeile aus: <br><br> '''LoadModule mod_tls_memcache.c''' <br><br> in <br><br> '''#LoadModule mod_tls_memcache.c''' <br><br> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> 4264f586756a8cd7cc801dc2cc1f42734aec26f6 835 834 2015-07-01T20:07:36Z Admin 1 /* Fehlermeldung memcache beim proftp start */ wikitext text/x-wiki __NOTOC__ ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch die proftpd.conf bearbeiten. Unter Debian Sarge befindet diese sich im Verzeichnis '''/etc'''. Bei Etch und Lenny im Verzeichnis '''/etc/proftpd'''.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Verbindung mittels TLS sichern== Openssl sollte hierzu installiert sein: <code><pre>apt-get install ssl-cert make-ssl-cert generate-default-snakeoil --force-overwrite</pre></code> Legt dann die '''tls.conf''' an: <code><pre>nano /etc/proftpd/conf.d/tls.conf</pre></code> Und füllt diese mit folgenden code: <code><pre><IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule></pre></code> Wenn Ihr eine Firewall am Server betreibt, muss noch eine TCP_IN Range als Passive Ports festgelegt werden. Diese Range (in einem sehr hohen Bereich und nur einige wenige Ports) tragt in der '''/etc/proftpd/proftpd.conf''' beim Parameter <code><pre>PassivePorts XXXXXX XXXXXX</pre></code> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Fehlermeldung memcache beim proftp Start== Um die Fehlermeldung zu unterbinden, stellt das memcache Modul ab: <code><pre>nano /etc/proftpd/modules.conf</pre></code> Kommentiert die folgende Zeile aus: <br><br> '''LoadModule mod_tls_memcache.c''' <br><br> in <br><br> '''#LoadModule mod_tls_memcache.c''' <br><br> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> c837d1f5b45a5bb1349b00a59031f3d51aeaa1a8 836 835 2015-07-01T20:08:23Z Admin 1 /* Verbindung mittels TLS sichern */ wikitext text/x-wiki __NOTOC__ ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch die proftpd.conf bearbeiten. Unter Debian Sarge befindet diese sich im Verzeichnis '''/etc'''. Bei Etch und Lenny im Verzeichnis '''/etc/proftpd'''.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Verbindung mittels TLS sichern== Openssl sollte hierzu installiert sein: <code><pre>apt-get install ssl-cert make-ssl-cert generate-default-snakeoil --force-overwrite</pre></code> Legt dann die '''tls.conf''' an: <code><pre>nano /etc/proftpd/conf.d/tls.conf</pre></code> Und füllt diese mit folgenden Code: <code><pre><IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule></pre></code> Wenn Ihr eine Firewall am Server betreibt, muss noch eine TCP_IN Range als Passive Ports festgelegt werden. Diese Range (in einem sehr hohen Bereich und nur einige wenige Ports) tragt in der '''/etc/proftpd/proftpd.conf''' beim Parameter <code><pre>PassivePorts XXXXXX XXXXXX</pre></code> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Fehlermeldung memcache beim proftp Start== Um die Fehlermeldung zu unterbinden, stellt das memcache Modul ab: <code><pre>nano /etc/proftpd/modules.conf</pre></code> Kommentiert die folgende Zeile aus: <br><br> '''LoadModule mod_tls_memcache.c''' <br><br> in <br><br> '''#LoadModule mod_tls_memcache.c''' <br><br> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> 0a03f6853af19bec7cbbbebd984c1af018b18d7e 842 836 2015-07-01T23:09:52Z Admin 1 /* Verbindung mittels TLS sichern */ wikitext text/x-wiki __NOTOC__ ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch die proftpd.conf bearbeiten. Unter Debian Sarge befindet diese sich im Verzeichnis '''/etc'''. Bei Etch und Lenny im Verzeichnis '''/etc/proftpd'''.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Verbindung mittels TLS sichern== Openssl sollte hierzu installiert sein: <code><pre>apt-get install ssl-cert</pre></code> Hierbei wird ein Zertifikat bereits angelegt. Wollt Ihr dieses nochmals erstellen, dann führt folgenden Befehl aus: <code><pre>make-ssl-cert generate-default-snakeoil --force-overwrite</pre></code> Legt dann die '''tls.conf''' an: <code><pre>nano /etc/proftpd/conf.d/tls.conf</pre></code> Und füllt diese mit folgenden Code: <code><pre><IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule></pre></code> Wenn Ihr eine Firewall am Server betreibt, muss noch eine TCP_IN Range als Passive Ports festgelegt werden. Diese Range (in einem sehr hohen Bereich und nur einige wenige Ports) tragt in der '''/etc/proftpd/proftpd.conf''' beim Parameter <code><pre>PassivePorts XXXXXX XXXXXX</pre></code> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Fehlermeldung memcache beim proftp Start== Um die Fehlermeldung zu unterbinden, stellt das memcache Modul ab: <code><pre>nano /etc/proftpd/modules.conf</pre></code> Kommentiert die folgende Zeile aus: <br><br> '''LoadModule mod_tls_memcache.c''' <br><br> in <br><br> '''#LoadModule mod_tls_memcache.c''' <br><br> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> c20e7e5810c165d777a940169d9d512ca333d0f0 843 842 2015-07-01T23:13:58Z Admin 1 /* Installation */ wikitext text/x-wiki __NOTOC__ ==Installation== Im Grunde ist das schnell geschehen. Dazu installiert als '''root''' das '''proftpd''' Paket: <code><pre>apt-get install proftpd</pre></code> Ihr werdet dann während der Installation gefragt, ob Ihr den Server in der inetd oder standalone Version installieren wollt. Wenn Ihr keine virtuellen Hosts betreibt ist an der Stelle der Standalone die bessere Wahl.<br> <br> Nach Beendigung der Installation fährt der FTP Server bereits hoch und Ihr könnt Euch mit Eurem bereits angelegten User anmelden. Für Debian ist der Proftp schon so konfiguriert, dass die FTP User gleich die Systemuser sind und landen somit gleich in Ihrem Homeverzeichnis. Allerdings hat man in der Standardkonfiguration die Möglichkeit, in jedes Verzeichnis außerhalb des Homeverzeichnisses zu wechseln. Das ist normalerweise nicht gewünscht. Um das abzustellen (der FTP User wird ge'''chail'''t, in sein Homeverzeichnis"gefängnis" gesperrt) müssen wir noch im Verzeichnis '''/etc/proftpd''' die '''proftpd.conf''' bearbeiten.<br> <br> Sucht in der '''proftpd.conf''' die Zeile <code><pre># DefaultRoot ~</pre></code> Entfernt das # . Die Zeile sieht nun wie folgt aus: <code><pre>DefaultRoot ~</pre></code> Speichert die Änderung. Man muss den Server nicht neu starten, sondern es genügt, den proftp Dämon neu zu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> Jetzt solltet Ihr nicht mehr aus dem eigenen Homeverzeichnis kommen. <br> <br> ==Verbindung mittels TLS sichern== Openssl sollte hierzu installiert sein: <code><pre>apt-get install ssl-cert</pre></code> Hierbei wird ein Zertifikat bereits angelegt. Wollt Ihr dieses nochmals erstellen, dann führt folgenden Befehl aus: <code><pre>make-ssl-cert generate-default-snakeoil --force-overwrite</pre></code> Legt dann die '''tls.conf''' an: <code><pre>nano /etc/proftpd/conf.d/tls.conf</pre></code> Und füllt diese mit folgenden Code: <code><pre><IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule></pre></code> Wenn Ihr eine Firewall am Server betreibt, muss noch eine TCP_IN Range als Passive Ports festgelegt werden. Diese Range (in einem sehr hohen Bereich und nur einige wenige Ports) tragt in der '''/etc/proftpd/proftpd.conf''' beim Parameter <code><pre>PassivePorts XXXXXX XXXXXX</pre></code> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Fehlermeldung memcache beim proftp Start== Um die Fehlermeldung zu unterbinden, stellt das memcache Modul ab: <code><pre>nano /etc/proftpd/modules.conf</pre></code> Kommentiert die folgende Zeile aus: <br><br> '''LoadModule mod_tls_memcache.c''' <br><br> in <br><br> '''#LoadModule mod_tls_memcache.c''' <br><br> Startet dann den '''proftp''' neu: <code><pre>/etc/init.d/proftpd restart</pre></code> <br><br> ==Anmeldung auf proftp langsam == Falls die Anmeldung auf dem Proftp verzögert läuft könnt Ihr mal folgendes ausprobieren:<br> <br> Editiert die Datei '''/etc/proftpd/proftpd.conf''' und fügt unter der Zeile <code><pre>IdentLookups off</pre></code> die Zeile <code><pre>UseReverseDNS off</pre></code> ein. Danach den proftp neu starten: <code><pre>/etc/init.d/proftpd restart</pre></code> <br> <br> ==User beim proftp ausschließen == Wenn auf ein bestimmtes User Verzeichnis nicht via ftp zugegriffen werden darf, dann könnt Ihr das ganz einfach wie folgt ausschließen: Schreibt den Usernamen in die /'''etc/ftpusers'''<br> Der Proftp schaut in diese Datei und schließt die dort aufgeführten User vom ftp-Zugriff aus. Nach einer Änderung startet den ftp-Server neu: <code><pre>/etc/init.d/proftpd restart</pre></code> 3ab5eb38a9e16006292ec5c4f0b979ccf13c0a68 Hauptseite 0 1 840 776 2015-07-01T20:36:10Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Mediawiki installieren und nutzen]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[IMAP Mail Server]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> c48dcf14fb97be758fd58f8e09330cf1be205c85 841 840 2015-07-01T20:37:38Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> cb601fef0e6738d27065086909290022789250f6 MediaWiki:Sidebar 8 3 844 803 2015-07-12T20:12:37Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Owncloud installieren | Owncloud installieren * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Server auf intel® Atom ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES d19b3cf7a9b1db541cef1105f3ac22881206d2b5 864 844 2015-10-11T14:29:02Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Owncloud installieren | Owncloud installieren * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** IMAP Mail Server|IMAP Mail Server ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES bfa76f8c4d52dc1867d01efd73fced88f272000a 865 864 2015-10-11T14:33:42Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Server im Eigenbau|Server im Eigenbau ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Openwrt auf wrt54GL|Openwrt auf wrt54GL ** VLan auf wrt54GL|VLan auf wrt54GL ** Wrt54GL öffnen|Wrt54GL öffnen * SEARCH * TOOLBOX * LANGUAGES c40bca6f61e4823a53ae956b3c4524d43ebfa142 866 865 2015-10-11T14:37:13Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES c198da31dbf5a7e79e1a6476a4867cbc5cd7417a 867 866 2015-10-11T14:38:10Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES 760ef6fbba73678b8eafa0007a636bea4f084a8e Wordpress installieren 0 252 845 2015-07-12T20:13:10Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:cent…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:wp.jpg|Logo]] </div> [https://de.wordpress.org/ Wordpress] ist die bekannte Blog Software, die mittlerweile eine große Anhängerschaft gefunden hat. Sie ist aber auch recht schnell installiert und konfiguriert. <br><br>Voraussetzung hierzu ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Wordpress downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://de.wordpress.org/txt-download/ Wordpress Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget https://de.wordpress.org/wordpress-4.2.2-de_DE.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf wordpress-4.2.2-de_DE.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis '''wordpress'''. <br><br> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/wordpress chmod 750 -R /var/www/wordpress </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/wordpress/wp-content/uploads </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /wordpress /var/www/wordpress <Directory /var/www/wordpress> Options FollowSymLinks AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /wordpress /var/www/wordpress''' legt fest, dass Ihr Euren Blog mittels '''EURE_WEB_ADRESSE/wordpress''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/wordpress <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/wordpress> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Wordpress einrichten== Ruft nun je nachdem wie Ihr den Apache 2 konfiguriert habt Wordpress auf: <br><br> '''EURE_URL/wordpress''' <br><br> Ihr erhaltet dann folgende Begrüßung, bei der Ihr auf "'''Los geht's'''" klickt: <br><br> [[Bild:wp1.jpg|wp1]] <br><br> Danach gebt Ihr Eure Daten für die vorbereitete mySQL Datenbank ein und klickt auf "'''Senden'''": <br><br> [[Bild:wp2.jpg|wp2]] <br><br> Nun auf "'''Installation ausführen'''": <br><br> [[Bild:wp3.jpg|wp3]] <br><br> Der nächste Dialog ist selbsterklärend. Gebt hier die benötigten Informationen an und klickt danach auf "'''Wordpress installieren'''": <br><br> [[Bild:wp4.jpg|wp4]] <br><br> Falls alles geklappt hat erhaltet Ihr einen Erfolgsmeldung und könnt Euch anmelden "'''Anmeldung'''": <br><br> [[Bild:wp5.jpg|wp5]] <br><br> Anmeldung: <br><br> [[Bild:wp6.jpg|wp6]] <br><br> Und schon könnt Ihr mit dem Bloggen loslegen und Euren ersten Blogeintrag schreiben: <br><br> [[Bild:wp7.jpg|wp7]] <br><br> 02c2e841ffdb84515516f9f89099f7b3ca7ecaba Datei:Wp.jpg 6 253 846 2015-07-12T20:13:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp1.jpg 6 254 847 2015-07-12T20:13:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp2.jpg 6 255 848 2015-07-12T20:14:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp3.jpg 6 256 849 2015-07-12T20:14:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp4.jpg 6 257 850 2015-07-12T20:14:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp5.jpg 6 258 851 2015-07-12T20:15:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp6.jpg 6 259 852 2015-07-12T20:15:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Wp7.jpg 6 260 853 2015-07-12T20:15:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Ioquake3 Server und Build Service 0 105 855 749 2015-10-09T21:01:32Z Admin 1 /* Dedicated Server auf Linux */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-dev openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Hier der Hinweis, dass Ihr den '''Port 9418''' (TCP_OUT) freischalten müsst, solltet Ihr eine Firewall am Laufen haben. <br><br> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libcurl'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 2b4b7c815e775c100023125198fcf6c5fe848637 Apache, PHP und mySQL 0 95 857 323 2015-10-11T10:16:21Z Admin 1 wikitext text/x-wiki Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01 legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> 9c4e96a65618c3fd7db2c6ed2df649d499e2af98 860 857 2015-10-11T14:23:51Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Apache installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01 legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> ==Ein Serverzertifikat für https anlegen== Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin): <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /phpmayadmin /usr/share/phpmyadmin <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> 9fac2c884cb0cbdcbbd1a62bf83f149b6fdd6127 861 860 2015-10-11T14:24:40Z Admin 1 /* APC Caching installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Apache installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01 legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> </br></br> ==Ein Serverzertifikat für https anlegen== Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin): <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /phpmayadmin /usr/share/phpmyadmin <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> db5bb41a54f324fba6a1f4d9e27eb5b6cad02e02 862 861 2015-10-11T14:24:52Z Admin 1 /* APC Caching installieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Apache installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01 legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Ein Serverzertifikat für https anlegen== Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin): <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /phpmayadmin /usr/share/phpmyadmin <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> 5a04d30fff55d5024f3bd7e3c7aeb4db1042dcbd 863 862 2015-10-11T14:26:13Z Admin 1 wikitext text/x-wiki ==Apache installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01 legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Ein Serverzertifikat für https anlegen== Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin): <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /phpmayadmin /usr/share/phpmyadmin <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> c19d5b6e15f9a47f769163af58f7448f6cfa5a1c Raspbian auf dem Raspberry Pi 2 installieren 0 229 859 788 2015-10-11T14:19:10Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br><br> Auf der Pi ein Raspbian zu installieren geht relativ einfach. Der hier beschriebene Weg funktioniert auf Basis eines beliebigen Linux auf dem Desktop. Ich verwende derzeit das aktuelle [http://www.opensuse.org openSUSE]. <br><br> Zuerst muss dazu sich eine microSD Karte angeschafft werden. Ich verwende hierfür eine 32GB Karte, 16 GB reichen aber auch erstmal aus. <br><br> Ihr benötigt zudem einen Kartenleser, damit Ihr die Karte an Eurem Linuxrechner vorbereiten könnt. Formatiert werden muss die Karte nicht. <br><br> ==Raspbian herunterladen und "installieren"== Unter Linux ladet Ihr dann erstmal das aktuelle Raspbian (zur Zeit Wheezy) herunter: <br><br> [http://www.raspberrypi.org/downloads Raspberry Downloads] <br><br> Ihr entpackt die Datei und erhaltet Damit ein Image (bin Datei). Dieses Image muss nur noch auf die Karte geschrieben werden: <code><pre>dd bs=1M if=Dateiname.bin of=/dev/sdx</pre></code> Bei Dateiname bitte den genauen Namen des Imges verwenden. Das Device '''/dev''' bitte ohne Partitionsnummer angeben. Also sollte die Karte als sde im System zu finden sein, dann '''/dev/sde'''. Solltet Ihr nicht sicher sein, welches Device die Karte im Kartenleser ist, dann mit einem <code><pre>fdisk -l</pre></code> anzeigen lassen. <br><br> ==Booten und konfigurieren== That's it! Wenn '''dd''' fertig geschrieben hat, dann die Karte in die Pi einstecken und mit dem Lan und via HDMI an einem Monitor anschließen. Zudem mindestens eine USB Tastatur dran für den Anfang. Jetzt Strom auf die Kiste geben und starten lassen. Ihr landet nach dem Boot recht schnell im Konfigurationsmenü (nur beim ersten Start):<br><br> [[Bild:raspiconf1.jpg|Konfiguration]]<br><br> '''Aktuell:''' Derzeit gibt es noch einen kleinen Fehler, der zumeist beim ersten Reboot Datenfehler auf der Karte bringt. Beendet deswegen zuerst das Programm '''raspi-config'''. Danach werdet root: <code><pre>sudo su</pre></code> Bei der Gelegenheit legt gleich mal ein eigenes Passwort für '''root''' an: <code><pre>passwd</pre></code> Jetzt aktualisiert erstmal die Firmware mit einem <code><pre>rpi-update</pre></code> Startet danach den Raspi neu. Jetzt meldet Euch als pi an. Dass Passwort ist '''raspberry'''. '''Achtung!''' Englische Tastatur! Für das y müsst Ihr deshalb z auf der deutschen Tastatur drücken <br><br> Jetzt startet den '''raspi-config''' neu: <code><pre>sudo raspi-config</pre></code> Ihr seht hier einige Konfigurationsmöglichkeiten, die man vornehmen kann und sollte. Dabei ist festzustellen, dass man hierüber viel Arbeit abgenommen bekommt. #Der erste Punkt '''"Expand Filesystem"''' ist das, was Ihr als erstes machen solltet. Das Image nutzt natürlich nicht Eure komplette SD Karte. Erst wenn Ihr diesen Punkt anstoßt, wird das Dateisystem auf den kompletten Datenspeicher ausgedehnt. #'''Change User Passwort:''' Hier könnt Ihr das Passwort des Users pi ändern. Das ist der Standarduser, der bereits eingerichtet ist und über den Ihr dann auch Root-Zugriff erlangen könnt (sudo su). Deswegen sollte hier sofort ein eigenes und sicheres Passwort gewählt werden. Das Standardpasswort lautet '''raspberry''' . Wenn Ihr später lieber mit root direkt arbeiten wollt, wie Ihr es eventuell von Debian gewohnt seid, dann könnt Ihr auch erstmal mittels '''sudo su root''' werden und danach mittels '''passwd''' ein neues Passwort für root festlegen. Danach könnt Ihr Euch direkt als Root anmelden. #'''Enable Boot to Desktop:''' Hier könnt Ihr einstellen, dass gleich die grafische Benutzeroberfläche gestartet wird. Ansonsten muss man diese manuell mit startx aktivieren. Ich mache das nicht, da wir einen Server aufbauen und ausschließlich über die Konsole arbeiten werden. #'''Internationalisation:''' Hier stellt Ihr Eure Sprache, Tastatur und Zeitzone ein. Das Menü ist selbsterklärend. <br> Wir steigen dann noch bei den '''Advanced Options''' ein:<br><br> [[Bild:Advanced.jpg|Advanced]] <br><br> Hier ist auf jeden Fall für uns der Punkt Enable remote command ('''SSH''') wichtig. Das aktivieren wir. Danach legen wir noch unseren '''Hostnamen''' fest. Jetzt starten wir die Kiste neu. Wenn Ihr wieder dieses Menü aufrufen wollt, dann startet dieses mittels <code><pre>raspi-config</pre></code> <br><br> ==Kleine Nacharbeiten== Loggt Euch nochmal als '''pi''' ein und werdet '''root''': <code><pre>sudo su</pre></code> Aktualisiert erstmal die Kiste: <code><pre>apt-get update apt-get upgrade</pre></code> Ich installiere gerne noch folgende Programme nach: <code><pre>apt-get install mc htop</pre></code> Danach nehmen wir uns noch unsere Netzwerkkonfiguration vor, solltet Ihr Eurer pi eine feste IP zuweisen wollen: <code><pre>nano /boot/cmdline.txt</pre></code> Die Datei besteht nur aus einer Zeile. Setzt hier nur hinten Eure gewünschte IP dazu:<br><br> ip=192.168.X.X<br><br> (die X durch Eure echte IP Werte ersetzen) <br><br> Danach die Änderung speichern! <br><br> '''ALTERNATIV:'''<br> Solltet Ihr mit obiger Methode 2 IP Adressen hinterlegt haben (eine statische, eine von Eurem DHCP Server geliefert), dann könnt Ihr anstatt wie kürz vorher beschrieben wie folgt vorgehen: Editiert die Datei '''/etc/dhcpcd.conf''' und fügt folgende Zeilen zum Schluss ein: <code><pre>interface eth0 static ip_address=192.168.XXX.XXX/24 static routers=192.168.XXX.1 static domain_name_servers=192.168.XXX.1</pre></code> Verwendet entsprechend die passende IPs. Speichert die Änderung und startet neu. <br><br> Zum Schluss kümmern wir uns noch um die '''SWAP''' Datei. Diese richten wir auf doppelte Größe Eures RAMs ein. Also wenn Ihr ein pi mit 1024 MB habt, dann auf 2048MB Swap. <code><pre>sudo su echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile dphys-swapfile setup dphys-swapfile swapon</pre></code> Stellt nun noch die Sprache, Zeitzone und Tastatur ein.<br> Zeitzone: <code><pre>dpkg-reconfigure tzdata</pre></code> Sprache: <code><pre>dpkg-reconfigure locales</pre></code> ''(hier de_de UTF8 verwenden und die eng Markierung herausnehmen)'' <br><br> Tastatur: <code><pre>dpkg-reconfigure keyboard-configuration</pre></code> ''(hier die Tastatur auf German stellen. Den Rest einfach übernehmen)'' <br><br> Das war es dann schonmal. Mit einem <code><pre>reboot</pre></code> startet die Kiste neu. Wenn Ihr jetzt nur noch die pi als Server verwenden wollt, dann könnt Ihr ab jetzt die Tastatur und den Monitor weg lassen und Euch via '''ssh''' an die dafür vergebene IP Adresse einloggen und weiter konfigurieren. <br><br> Wenn es beim Login am '''ssh''' dauert, bis die Passwortabfrage kommt, dann kann es sein, dass der DNS nicht korrekt eingestellt ist. Überprüft mit einem <code><pre> cat /etc/resolv.conf</pre></code> ob der DNS korrekt auf der Kiste eingetragen ist. Falls nicht, editiert die Konfiguration entsprechend: <code><pre> nano /etc/resolv.conf</pre></code> ==Backup der Installation== Wenn man viel (gerade am Anfang) mit dem Pi experimentiert, dann macht es Sinn, seine Basisinstallation zu sichern. Man benötigt entweder ein weiteres Linux dazu (und einen Kartenleser), oder eine zweite Karte mit einem installierten Linux, um das Backup direkt am Pi zu machen. Beides verläuft ähnlich. Ich erkläre das an der Variante am Pi mit einer zusätzlichen externen Festplatte. <br><br> Startet den Pi mit einem Linux und steckt danach den Kartenleser mit Eurer Karte an, auf der sich Euer zu sicherndes System befindet. Mit einem <code><pre>fdisk -l</pre></code> findet Ihr heraus, um welches Device es sich bei Eurer Karte handelt. Bei mir ist es beispielsweise '''/dev/sdd''' <br><br> Ich lege unter '''/home''' (meine Festplatte) ein weiteres Verzeichnis an: <code><pre>mkdir /home/image</pre></code> Jetzt kopiere ich die komplette Karte in ein Image. Achtung, bei einer 16GB Karte sind das eben auch 16GB! <code><pre>dd bs=1M if=/dev/sdd of=/home/image/wheezy.img</pre></code> Dies dauert dann eine Weile. <br><br> Die Sicherung spielen wir dann wieder mit einem <code><pre>dd bs=1M if=/home/image/wheezy.img of=/dev/sdd</pre></code> Jetzt noch ein Kniff. In meinem Fall kopiere ich beispielsweise von einer 16GB Karte auf eine 32GB Karte. D.h. nun sind rund 16 GB nicht benutzt. Wheezy verteilt sich ja auf 2 Partitionen. D.h. die zweite (root) Partition kann nach hinten expandiert werden. <br><br> Dazu checken wir erstmal die die zweite Partition: <code><pre>e2fsck -f /dev/sdd2</pre></code> Danach können wir die Partition hochziehen: <code><pre>resize2fs /dev/sdd2</pre></code> Steckt die Karten nun um und testet die "geclonte" Karte auf dem PI. c3014d0701d525eb8537488f191228c2cc259633 Serverstatus zumailen 0 261 868 2015-10-11T14:39:10Z Admin 1 Die Seite wurde neu angelegt: „Über ein einfaches Skript lassen wir uns in regelmäßigen Abständen den Serverstatus zusenden. Dabei interessiert uns die Auslastung der CPU, die Temperatur…“ wikitext text/x-wiki Über ein einfaches Skript lassen wir uns in regelmäßigen Abständen den Serverstatus zusenden. Dabei interessiert uns die Auslastung der CPU, die Temperatur und der freie Platz auf den Datenträgern. Ich habe hierzu ein einfaches Shell Skript geschrieben. Dieses legt wie folgt an: <code><pre>nano /usr/local/bin/serverstatus</pre></code> Füllt das Skript mit folgenden Inhalt: <code><pre>#!/bin/sh rm /var/log/status.log echo "Statusanzeige" >> /var/log/status.log date >> /var/log/status.log cat /proc/version >> /var/log/status.log echo "" >> /var/log/status.log uptime >> /var/log/status.log echo "" >> /var/log/status.log cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp) cpuTemp1=$(($cpuTemp0/1000)) cpuTemp2=$(($cpuTemp0/100)) cpuTempM=$(($cpuTemp2 % $cpuTemp1)) echo CPU temp"="$cpuTemp1"."$cpuTempM"'C" >> /var/log/status.log echo GPU $(/opt/vc/bin/vcgencmd measure_temp) >> /var/log/status.log echo "" >> /var/log/status.log free >> /var/log/status.log echo "" >> /var/log/status.log df -h >> /var/log/status.log echo "" >> /var/log/status.log fdisk -l >> /var/log/status.log mail -s "Serverstatus" meine@e-mail.adresse < /var/log/status.log</pre></code> Die dummy Mail Adresse am Ende des Skripts ersetzt durch Eure eigene. <br><br> Speichert das Skript ab und macht es ausführbar: <code><pre>chmod +x /usr/local/bin/serverstatus</pre></code> Danach tragen wir das Skript in unsere Crontab ein, damit dieses regelmäßig ausgeführt wird: <code><pre>crontab -e</pre></code> Fügt folgende Zeilen am Ende ein: <code><pre># Systemstatus every 2 hours 0 */2 * * * /usr/local/bin/serverstatus > /dev/null</pre></code> Speichert die Änderung ab. Ihr bekommt dann alle zwei Stunden per Mail den Status zugeschickt: <code><pre> Statusanzeige Sa 27. Jun 18:00:01 CEST 2015 Linux version 4.0.6-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #798 SMP PREEMPT Tue Jun 23 18:06:01 BST 2015 18:00:01 up 2 days, 17:49, 0 users, load average: 0,05, 0,07, 0,07 CPU temp=49.2'C GPU temp=48.7'C total used free shared buffers cached Mem: 948256 926728 21528 0 34812 270460 -/+ buffers/cache: 621456 326800 Swap: 2097148 936 2096212 Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf /dev/root 29G 5,6G 23G 21% / devtmpfs 459M 0 459M 0% /dev tmpfs 93M 300K 93M 1% /run tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 186M 0 186M 0% /run/shm /dev/mmcblk0p1 56M 20M 37M 35% /boot /dev/sda1 230G 3,3G 215G 2% /home </pre></code> 8407da6b4d6c2bbd1c38906d584494469eeed125 Mediaserver mittels miniDLNA 0 262 869 2015-10-11T14:40:24Z Admin 1 Die Seite wurde neu angelegt: „Die Videosammlung oder seine MP3s in seinem Heimnetz zu streamen ... sowas macht durchaus Sinn. Auch hierfür gibt es eine einfache Lösung. miniDLNA ist ein e…“ wikitext text/x-wiki Die Videosammlung oder seine MP3s in seinem Heimnetz zu streamen ... sowas macht durchaus Sinn. Auch hierfür gibt es eine einfache Lösung. miniDLNA ist ein einfacher DLNA Server, der schnell installiert und konfiguriert ist. Als Root installiert Ihr miniDLNA über einen einfachen <code><pre>apt-get install minidlna</pre></code> Der Dienst wird danach automatisch gestartet. Um weitere Einstellungen vorzunehmen muss die /etc/minidnla konfiguriert werden. Ich habe bereits den proftpd installiert, um Dateien via FTP auf den Pi zu kopieren. Legt am besten einen eigenen neuen User an, der ein eigenes Homeverzeichnis bekommt. Nennen wir ihn foobar: <code><pre>adduser foobar</pre></code> Sein Heimatverzeichnis liegt dann unter /home/foobar . Unter dem Verzeichnis legen wir folgende Verzeichnisse an: <code><pre>su foobar mkdir /home/foobar/pictures mkdir /home/foobar/music mkdir /home/foobar/videos mkdir /home/foobar/db exit</pre></code> Das letzte Verzeichnis nehmen wir als Datenbankpfad her. Das muss noch dem User minidlna zugewiesen werden. Als root: <code><pre>chown -R minidlna:minidlna /home/foobar/db</pre></code> Nun konfigurieren wir die minidlna.conf: <code><pre>nano /etc/minidlna.conf</pre></code> Folgende Teile müssen angepasst werden: <br><br> Kommentiert die Zeile '''mdia_dir= ...''' aus und fügt folgende Zeilen ein: <br><br> '''media_dir=A,/home/foobar/music'''<br> '''media_dir=P,/home/foobar/pictures'''<br> '''media_dir=V,/home/foobar/videos''' <br><br> Das Datenbankverzeichnis anpassen: <br><br> '''db_dir=/home/foobar/db''' <br><br> Einen Beliebigen Servernamen unter <br><br> '''friendly_name=Mein Server''' <br><br> eingeben. <br><br> Netzwerk festlegen, wenn über eth0 angeschlossen: <br><br> '''network_interface=eth0''' <br><br> Das '''#''' vor <br><br> '''inotify=yes''' <br><br> entfernen. Damit wird automatisch die Datenbank bei neuen Dateien aktualisiert. <br><br> That's it. Änderungen speichern und Server mit einem <code><pre>service minidlna force-reload</pre></code> neu starten. Dann wird die Datenbank auch neu geschrieben. Jetzt ladet via FTP Eure Daten hoch. Über einen Browser könnt Ihr eine einfache Statistik abrufen, indem Ihr Eure ServerIP mit dem '''Port 8200''' aufruft: <br><br> <code>'''http://xxx.xxx.xxx.xxx:8200'''</code> <br><br> Jetzt hängt Euch mittels einem DLNA Client (Windows Media Player oder beispielsweise die PS3 dran). Wenn alles richtig konfiguriert ist, solltet Ihr nun Eure Videos oder MP3 abspielen können. <br><br> Der Raspberry Pi und die Playstation 3. Die Geräte verstehen sich im Netz ... <br> [[Bild:dlna.jpg|DLNA]] <br> Was den Durchsatz betrifft: HD Videos (Blu-ray Auflösung) können ruckelfrei über das Lan gestreamt werden! aa9c92ce2f98c936b7f3430b2a7e8c4cf829820f Der dedizierte Quake3 Server 0 263 870 2015-10-11T14:40:53Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:cent…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Vorbereitung== Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können. <code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code> Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home: <code><pre>mkdir /home/work</pre></code> Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden. <code><pre>adduser gameserver</pre></code> <br> ==libsdl2 kompilieren== Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis: <code><pre>cd /home/work</pre></code> Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads] <code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code> Danach müsst Ihr das Paket umbenennen: <code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code> Danach wird das Paket entpackt: <code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code> Wechselt danach in das neue Verzeichnis <code><pre>cd SDL2-2.0.3</pre></code> Startet den Compile: <code><pre>debuild -uc -us</pre></code> Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.: <code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code> Danach nochmal den Compile sterten. Er sollte nun durchlaufen: <code><pre>debuild -uc -us</pre></code> Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann: <code><pre>cd /home/work dpkg -i libsdl2_2.0.3_armhf.deb dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code> <br> ==Den Quake 3 Server bauen und konfigurieren== Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Quellverzeichnis: <code><pre>cd quake3</pre></code> Der Compile wird wie folgt gestartet: <code><pre>make -j5 copyfiles</pre></code> Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten). <br><br> [[Bild:q3bauen.jpg|Q3 Build]] <br><br> Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code> <br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> <br> ==Startscript und ein init Script schreiben== Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an: <code><pre>nano /usr/local/bin/q3serverstart</pre></code> Das füllen wir mit folgendem Inhalt: <code><pre>#!/bin/sh pkill -u gameserver su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code> Macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code> Testet das Script, indem Ihr es startet: <code><pre>q3serverstart</pre></code> Ein '''htop''' sollte Auskunft geben, ob der Server läuft:<br><br> [[Bild:q3running.jpg|Läuft]] <br><br> Danach bauen wir uns das init Script: <code><pre>nano /etc/init.d/q3ded</pre></code> Dieses füllt wie folgt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: dedicated q3server start # Required-Start: $remote_fs $syslog $network $firewall # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: q3serverstart initscript # Description: Custom quake3start, placed in /etc/init.d. # script written by Gargi 2015 http://www.gargi.org ### END INIT INFO #needed modules case "$1" in start) pkill -u gameserver /usr/local/bin/q3serverstart echo "Starting Quake3 server ... ready to frag" ;; stop) pkill -u quaker echo "Quake3 Server stopped. " ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac</pre></code> Auch das Skript braucht den x-Flag, damit es startet: <code><pre>chmod +x /etc/init.d/q3ded</pre></code> Ihr könnt nun mit einem <code><pre>/etc/init.d/q3ded start</pre></code> den Server starten, oder wie folgt stoppen: <code><pre>/etc/init.d/q3ded stop</pre></code> Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein: <code><pre> cd /etc/init.d update-rc.d q3ded defaults</pre></code> Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server. <br><br> ==Buildscript für den Quake 3 Server== Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht: :# Einmal am Tag prüfen, ob eine neue Version vorhanden :# Falls ja, neue Quellen herunterladen und kompilieren :# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten :# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren :# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version Legt eine neue Datei an: <code><pre>nano /usr/local/bin/q3check</pre></code> Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst: <code><pre> #!/bin/bash #script written by Gargi 2015 http://www.gargi.org quakeuser=gameserver // Der User, der den Quakeserver startet. work_dir=/home/work // Euer Arbeitsverzeichnis files=/home/gameserver/files // Das Verzeichnis, in dem das tar.gz Paket kopiert wird fileuser=gameserver // User, der auf das Paket zugreifen darf server_cfg=server.cfg // Name Eurer Q3 Serverkonfiguration mailadresse=meine@mail.adresse // Eure E-mail Adresse madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm $work_dir/version_alt.txt mv $work_dir/version.txt $work_dir/version_alt.txt #get latest files cd $work_dir rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd $work_dir/quake3 git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt #check if something is to be done ver_neu=$(cat $work_dir/version.txt) ver_alt=$(cat $work_dir/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt exit 1 else rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt #build new linux version pkill -u $quakeuser rm -R /usr/local/games/quake3 make -j5 copyfiles #built date reminder rm $work_dir/built.txt date +%d.%m.%Y > $work_dir/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log fi fi </pre></code> Nach dem Speichern machen wir die Datei noch ausführbar: <code><pre>chmod +x /usr/local/bin/q3check</pre></code> Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll: <code><pre>crontab -e</pre></code> Am Schluss fügt folgendes ein: <code><pre># Check for new Quakefiles at 6 o clock morning 1 6 * * * /usr/local/bin/q3check > /dev/null</pre></code> Speichert die Änderung. <br><br> Happy Quaking! <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.debian.org Debian Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer 49a4f46563616ae3674be6bd55f7cea117ec2a67 PhpBB3 Forum installieren 0 264 871 2015-10-11T14:42:59Z Admin 1 Die Seite wurde neu angelegt: „<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Auch ein kleines privates Forum lässt…“ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Auch ein kleines privates Forum lässt sich auf dem Raspberry Pi 2 betreiben. Hier sollte allerdings auch darauf geachtet werden, dass zumindest die Anmeldung an das Forum nicht vollkommen frei ist, sondern zumindest über eine Freischaltung eines Administrators überwacht wird. Spambots können sich sonst recht schnell anmelden und über das Forum ihre unerwünschten Botschaften verbreiten. Wenn es nur für Freunde und bekannte zugänglich sein soll empfiehlt sich zudem ein zusätzlicher htaccess Schutz.<br><br> Voraussetzungen: :* Apache 2, php und mySQL sind installiert :* curl ist installiert Falls curl noch nicht auf dem Server installiert ist, bitte mit einem <code><pre>apt-get install curl</pre></code> nachholen. <br> <br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==phpbb3 downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.phpbb.com/downloads/ phpbb3 Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget https://www.phpbb.com/files/release/phpBB-3.1.5.tar.bz2 </pre></code> Entpackt wird das dann mit einem <code><pre>tar -xvf phpBB-3.1.5.tar.bz2</pre></code> Ihr habt jetzt ein neues Verzeichnis '''phpbb3'''. <br><br> Nun installieren wir gleich das deutsche Sprachpaket (Sie-Form), das ebenso im Downloadbereich zu finden ist. Dort bitte den Downloadlink entsprechend kopieren und im Folgenden verwenden: <code><pre>curl https://www.phpbb.com/customise/db/download/116501 > german.zip</pre></code> Danach auspacken: <code><pre>unzip german.zip</pre></code> Und zwei Verzeichnisse kopieren: <code><pre>cp -r german_formal_honorifics_3_1_5/* phpBB3</pre></code> Die Dateien und das ausgepackte Sprachdateiverzeichnis kann danach wieder gelöscht werden. <code><pre>rm german.zip rm -r german_formal_honorifics_3_1_5</pre></code> Jetzt müssen wir noch für klare Besitzverhältnisse sorgen: <code><pre>chown -R root:www-data /var/www/phpBB3 chmod 750 -R /var/www/phpBB3 </pre></code> Und noch ein paar Sonderrechte, damit entsprechende Uploadverzeichnisse genutzt werden können und auch die Konfigurationsdatei während der Installation beschreibbar ist: <code><pre>chmod 770 -R phpBB3/cache chmod 770 -R phpBB3/files chmod 770 -R phpBB3/store chmod 770 -R phpBB3/images/avatars/upload chmod 770 phpBB3/config.php</pre></code> Alleine wegen der Uploadmöglichkeit ist es zu überlegen, ob man hier nicht das Forum, gerade wenn es eh rein privat genutzt wird, via htaccess noch schützt. <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /phpbb3 /var/www/phpBB3 <Directory /var/www/phpBB3> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /phpbb3 /var/www/phpBB3''' legt fest, dass Ihr Euer Forum mittels '''EURE_WEB_ADRESSE/phpbb3''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==phpBB3 einrichten== Startet nun die Installation, indem Ihr Eure Webadresse im Browser aufruft:<br><br> '''EURE_WEB_ADRESSE/phpbb3''' <br><br> Stellt im ersten Dialog die Sprache auf Deutsch ein und klickt dann auf '''Installieren''': <br><br> [[Bild:phpbb1.jpg|phpbbBild1]] <br><br> Arbeitet die folgenden Dialoge ab. Achtet hierbei darauf, dass bei der Anzeige der Serverkonfiguration keine Fehler gemeldet werden. Ansonsten sind die Abfragen selbsterklärend und gehe deshalb nicht Bild für Bild darauf ein: <br><br> [[Bild:phpbb2.jpg|phpbbBild2]] <br><br> Wenn alles sauber durchgelaufen ist und die Datenbank geschrieben wurde, könnt Ihr Euch gleich im Administratorpanel anmelden: <br><br> [[Bild:phpbb3.jpg|phpbbBild3]] <br><br> Nehmt dort weitere Einstellungen wie gewünscht vor, richtet neue Foren ein und vor allem sichert die Benutzerregistrierung, indem Ihr diese nur über eine Freischaltung eines Administrators zulasst: <br><br> [[Bild:phpbb4.jpg|phpbbBild4]] <br><br> Über weitere Einstellungsmöglichkeiten und Sicherheitseinstellungen könnt Ihr Euch auf der [https://www.phpbb.com/ phpBB3 Homepage] informieren. <br><br> Bevor Ihr Euch dann im Forum anmeldet, nehmt noch folgende Einstellungen auf Euren Server vor. Dazu befindet Ihr Euch nach wie vor im Verzeichnis '''/var/www/''': <br><br> 1. Setzt die Schreibberechtigung seitens des Webservers auf die Konfigurationsdatei wieder zurück: <code><pre>chmod 750 phpBB3/config.php</pre></code> 2. Löscht das Installationsverzeichnis: <code><pre>rm -R phpBB3/install</pre></code> Ruft nun Euer Forum unter Eurer URL im Browser auf: <br><br> '''EURE_WEB_ADRESSE/phpbb3''' <br><br> ==Forum zusätzlich über .htaccess schützen== Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Forum bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> <code><pre>nano /var/www/phpBB3/.htaccess</pre></code> Fügt nun in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName phpbb3 AuthUserFile /var/www/phpBB3/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> 1f6cd77d9e53cc08f739c76cbac32c4e468ecfe5 Datei:Phpbb1.jpg 6 265 872 2015-10-11T14:45:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Phpbb2.jpg 6 266 873 2015-10-11T14:45:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Phpbb3.jpg 6 267 874 2015-10-11T14:45:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Phpbb4.jpg 6 268 875 2015-10-11T14:46:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 876 875 2015-10-11T14:46:49Z Admin 1 Admin lud eine neue Version von [[Datei:Phpbb4.jpg]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Datei:Dlna.jpg 6 269 877 2015-10-11T14:47:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 878 877 2015-10-11T14:47:41Z Admin 1 Admin lud eine neue Version von [[Datei:Dlna.jpg]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Auf Viren und Rootkits prüfen 0 270 879 2015-10-11T14:48:36Z Admin 1 Die Seite wurde neu angelegt: „Viren unter Linux? Gibt es das? Sicherlich gibt es nur wenige Linuxviren. Hier sprechen wir eher von Rootkits, die im Hintergrund ihr unerwünschtes Dasein fri…“ wikitext text/x-wiki Viren unter Linux? Gibt es das? Sicherlich gibt es nur wenige Linuxviren. Hier sprechen wir eher von Rootkits, die im Hintergrund ihr unerwünschtes Dasein fristen können und einen Server kompromittieren. Viren selbst sind nur dahingegen interessant, da diese eventuell auf einen Webserver in ein Uploadverzeichnis landen können und Usern Schaden zufügen, die diese Datei wieder auf ihren Windows Rechner herunterladen. Dies kann in Form von Bildern, gepackten Dateien etc. passieren.<br><br> Wir wollen hier nun zwei Möglichkeiten besprechen, regelmäßig ein Auge auf diese mögliche Bedrohung zu werfen. Das Tutorial wir hier zwei Schädlingsbekämpfer betrachten: :# Der [http://rkhunter.sourceforge.net/ rkhunter] (Rootkit Hunter) :# [http://www.clamav.net/ ClamAV] Der Linux Virenscanner <br> ==rkhunter== Den rkhunter installieren wir mit einem <code><pre>apt-get install rkhunter</pre></code> Editiert zuerst die '''/etc/rkhunter.conf''': <code><pre>nano /etc/rkhunter.conf</pre></code> Den Parameter <br><br> '''ALLOW_SSH_ROOT_USER=no''' <br><br> setzt auf yes:<br><br> '''ALLOW_SSH_ROOT_USER=yes''' <br><br> Eure E-MAil Adresse könnt Ihr beim Parameter '''MAIL-ON-WARNING=''' festlegen. Ihr bekommt dann eine Mail, sollte der rkhunter etwas Verdächtiges gefunden haben. Speichert die Änderung ab.<br><br> Nach der Installation lassen wir gleich mal ein <code><pre>rkhunter -C</pre></code> los, um die Config zu prüfen. Danach kann die Datenbank mit den installierten Dateien abgeglichen werden: <code><pre>rkhunter --propupd</pre></code> Die Datenbank selbst wird wie folgt aktualisiert: <code><pre>rkhunter --update</pre></code> <code><pre>Checking rkhunter data files... Checking file mirrors.dat [ No update ] Checking file programs_bad.dat [ No update ] Checking file backdoorports.dat [ No update ] Checking file suspscan.dat [ No update ] Checking file i18n/cn [ No update ] Checking file i18n/de [ No update ] Checking file i18n/en [ No update ] Checking file i18n/tr [ No update ] Checking file i18n/tr.utf8 [ No update ] Checking file i18n/zh [ No update ] Checking file i18n/zh.utf8 [ No update ]</pre></code> Als nächstes lassen wir einen Scan loslaufen: <code><pre>rkhunter -c --sk</pre></code> Solltet Ihr hier Warnungen erhalten, dann seht Euch die '''/var/log/rkhunter.log''' etwas näher an. Diese verrät dann genauer, wo der rkhunter seine Probleme hat. Der rkhunter reagiert sehr empfindlich, von daher sollte man nicht gleich mit dem Schlimmsten rechnen, allerdings sollte man hier genau hinsehen. Im Internet findet man oft Hilfe zu manchen Meldungen, insbesondere ob sich die Meldung um einen sogenannten false-positive handelt.<br><br> Legt Euch nun ein Skript an ('''Exim4''' muss installiert sein): <code><pre>nano /usr/local/bin/rkcheck</pre></code> Dieses befüllt wie folgt: <code><pre> #!/bin/sh # Rootkit Checkskript by Gargi 2015 # # # Set your e-mail mail_adr=deine@mail.adresse # rm /var/log/viri.log rm /var/log/rkhunter.log echo "ROOTKITCHECK" >> /var/log/viri.log date >> /var/log/viri.log rkhunter --update rkhunter -c --cronjob echo "" >> /var/log/viri.log echo "Rootkit Scan Results" >> /var/log/viri.log cat /var/log/rkhunter.log | grep Possible >> /var/log/viri.log cat /var/log/rkhunter.log | grep Suspect >> /var/log/viri.log echo "" >> /var/log/viri.log sys_name=$(hostname) mail -s "Rootkit Check on $sys_name" $mail_adr < /var/log/viri.log</pre></code> Tragt oben Eure E-Mail Adresse ein. Danach macht das Script ausführbar: <code><pre>chmod +x /usr/local/bin/rkcheck</pre></code> Damit dieses dann regelmäßig auf Suche geht, baut das in die '''crontab''' ein: <code><pre>crontab -e</pre></code> Fügt diese Zeilen ein: <code><pre> # Check for rootkits every 2 hours 0 */2 * * * /usr/local/bin/rkcheck > /dev/null </pre></code> Speichert die Änderung ab. Alle zwei Stunden erfolgt dann die Prüfung und Ihr erhaltet eine E-Mail mit den Ergebnissen. Bei einem Fund bekommt Ihr dann noch eine zweite Mail mit einer deutlichen Warnung. <br><br> ==ClamAV== Mit dem ClamAV wollen wir im Grunde unser Webverzeichnis auf Viren prüfen. Uns interessiert dabei besonders, ob irgendwelche Schädlinge (wie auch immer) hochgeladen wurden. Ein Virenscanner ist dennoch keine 100%ige Garantie oder gar ein absoluter Schutz, aber er kann helfen, zumindest bekannte Schädlinge aufzustöbern.<br> Zunächst installieren wir die benötigten Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Der freshclam sorgt dafür, dass regelmäßig eine neue Virensignatur heruntergeladen wird. Prüft nach, ob Ihr die aktuelle Signatur habt: <code><pre>freshclam</pre></code> dd1f0bd3998cd0cfd32bb886f7b573cda8b52f65 E-Mails via Exim4 verschicken 0 271 880 2015-10-11T14:49:28Z Admin 1 Die Seite wurde neu angelegt: „Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider d…“ wikitext text/x-wiki Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten.<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration ea472e7dab31c295e3ec544a0393bf2310cb69e6 888 880 2015-10-28T18:49:58Z Admin 1 wikitext text/x-wiki Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten.<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration e81eb5d314e6ea97fb503189b002545002d0c2c3 889 888 2015-10-28T18:56:49Z Admin 1 wikitext text/x-wiki Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten.<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Nein'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration 51ccce2d272da513a61451f2e9e499707851c0fe 903 889 2015-11-02T12:56:54Z Admin 1 wikitext text/x-wiki Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten.<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Nein'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration 22ab43d6f5693fa528acd96fe3a78d6bf1494424 904 903 2015-11-02T21:14:04Z Admin 1 wikitext text/x-wiki Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten.<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, bei denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Nein'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration 797a045db83e5deded12dfaa08da67b3918fb9f4 Firewalling: iptables und Fail2Ban 0 102 881 798 2015-10-14T23:04:07Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.190== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallsckript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 4b4bd7279c5388d1fafdfda8721f5101d61ae40b 882 881 2015-10-14T23:04:33Z Admin 1 /* fail2ban auf Debian Squeeze installieren und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.190== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallsckript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> ed7d57ae8299d35d2fab6e7091ba5fdbd37b6cdd 883 882 2015-10-14T23:05:07Z Admin 1 /* fail2ban versendet Mails mit Datum 1.1.190 */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallsckript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 0ed0ead21bd5858740d6c6c93a4a183e650102bd 884 883 2015-10-14T23:05:20Z Admin 1 /* fail2ban versendet Mails mit Datum 1.1.1970 */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> ea93d5315d5806ef710a8e4eb156165adaccfe49 887 884 2015-10-28T18:38:19Z Admin 1 /* fail2ban auf Debian Squeeze installieren und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Ja'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 5cade38e75c718f0b8d941c63183cc6c51e8392a 890 887 2015-10-28T18:57:28Z Admin 1 /* fail2ban auf Debian Squeeze installieren und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren stellt im jeweiligen Bereich das <code><pre>enabled = false</pre></code> auf <code><pre>enabled = true</pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Nein'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 56bbb13601552ee84c18814d37ef96b7fbd26005 Raspbian auf dem Raspberry Pi 2 installieren 0 229 885 859 2015-10-25T20:04:21Z Admin 1 /* Kleine Nacharbeiten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br><br> Auf der Pi ein Raspbian zu installieren geht relativ einfach. Der hier beschriebene Weg funktioniert auf Basis eines beliebigen Linux auf dem Desktop. Ich verwende derzeit das aktuelle [http://www.opensuse.org openSUSE]. <br><br> Zuerst muss dazu sich eine microSD Karte angeschafft werden. Ich verwende hierfür eine 32GB Karte, 16 GB reichen aber auch erstmal aus. <br><br> Ihr benötigt zudem einen Kartenleser, damit Ihr die Karte an Eurem Linuxrechner vorbereiten könnt. Formatiert werden muss die Karte nicht. <br><br> ==Raspbian herunterladen und "installieren"== Unter Linux ladet Ihr dann erstmal das aktuelle Raspbian (zur Zeit Wheezy) herunter: <br><br> [http://www.raspberrypi.org/downloads Raspberry Downloads] <br><br> Ihr entpackt die Datei und erhaltet Damit ein Image (bin Datei). Dieses Image muss nur noch auf die Karte geschrieben werden: <code><pre>dd bs=1M if=Dateiname.bin of=/dev/sdx</pre></code> Bei Dateiname bitte den genauen Namen des Imges verwenden. Das Device '''/dev''' bitte ohne Partitionsnummer angeben. Also sollte die Karte als sde im System zu finden sein, dann '''/dev/sde'''. Solltet Ihr nicht sicher sein, welches Device die Karte im Kartenleser ist, dann mit einem <code><pre>fdisk -l</pre></code> anzeigen lassen. <br><br> ==Booten und konfigurieren== That's it! Wenn '''dd''' fertig geschrieben hat, dann die Karte in die Pi einstecken und mit dem Lan und via HDMI an einem Monitor anschließen. Zudem mindestens eine USB Tastatur dran für den Anfang. Jetzt Strom auf die Kiste geben und starten lassen. Ihr landet nach dem Boot recht schnell im Konfigurationsmenü (nur beim ersten Start):<br><br> [[Bild:raspiconf1.jpg|Konfiguration]]<br><br> '''Aktuell:''' Derzeit gibt es noch einen kleinen Fehler, der zumeist beim ersten Reboot Datenfehler auf der Karte bringt. Beendet deswegen zuerst das Programm '''raspi-config'''. Danach werdet root: <code><pre>sudo su</pre></code> Bei der Gelegenheit legt gleich mal ein eigenes Passwort für '''root''' an: <code><pre>passwd</pre></code> Jetzt aktualisiert erstmal die Firmware mit einem <code><pre>rpi-update</pre></code> Startet danach den Raspi neu. Jetzt meldet Euch als pi an. Dass Passwort ist '''raspberry'''. '''Achtung!''' Englische Tastatur! Für das y müsst Ihr deshalb z auf der deutschen Tastatur drücken <br><br> Jetzt startet den '''raspi-config''' neu: <code><pre>sudo raspi-config</pre></code> Ihr seht hier einige Konfigurationsmöglichkeiten, die man vornehmen kann und sollte. Dabei ist festzustellen, dass man hierüber viel Arbeit abgenommen bekommt. #Der erste Punkt '''"Expand Filesystem"''' ist das, was Ihr als erstes machen solltet. Das Image nutzt natürlich nicht Eure komplette SD Karte. Erst wenn Ihr diesen Punkt anstoßt, wird das Dateisystem auf den kompletten Datenspeicher ausgedehnt. #'''Change User Passwort:''' Hier könnt Ihr das Passwort des Users pi ändern. Das ist der Standarduser, der bereits eingerichtet ist und über den Ihr dann auch Root-Zugriff erlangen könnt (sudo su). Deswegen sollte hier sofort ein eigenes und sicheres Passwort gewählt werden. Das Standardpasswort lautet '''raspberry''' . Wenn Ihr später lieber mit root direkt arbeiten wollt, wie Ihr es eventuell von Debian gewohnt seid, dann könnt Ihr auch erstmal mittels '''sudo su root''' werden und danach mittels '''passwd''' ein neues Passwort für root festlegen. Danach könnt Ihr Euch direkt als Root anmelden. #'''Enable Boot to Desktop:''' Hier könnt Ihr einstellen, dass gleich die grafische Benutzeroberfläche gestartet wird. Ansonsten muss man diese manuell mit startx aktivieren. Ich mache das nicht, da wir einen Server aufbauen und ausschließlich über die Konsole arbeiten werden. #'''Internationalisation:''' Hier stellt Ihr Eure Sprache, Tastatur und Zeitzone ein. Das Menü ist selbsterklärend. <br> Wir steigen dann noch bei den '''Advanced Options''' ein:<br><br> [[Bild:Advanced.jpg|Advanced]] <br><br> Hier ist auf jeden Fall für uns der Punkt Enable remote command ('''SSH''') wichtig. Das aktivieren wir. Danach legen wir noch unseren '''Hostnamen''' fest. Jetzt starten wir die Kiste neu. Wenn Ihr wieder dieses Menü aufrufen wollt, dann startet dieses mittels <code><pre>raspi-config</pre></code> <br><br> ==Kleine Nacharbeiten== Loggt Euch nochmal als '''pi''' ein und werdet '''root''': <code><pre>sudo su</pre></code> Aktualisiert erstmal die Kiste: <code><pre>apt-get update apt-get upgrade</pre></code> Ich installiere gerne noch folgende Programme nach: <code><pre>apt-get install mc htop</pre></code> Danach nehmen wir uns noch unsere Netzwerkkonfiguration vor, solltet Ihr Eurer pi eine feste IP zuweisen wollen: <code><pre>nano /boot/cmdline.txt</pre></code> Die Datei besteht nur aus einer Zeile. Setzt hier nur hinten Eure gewünschte IP dazu:<br><br> ip=192.168.X.X<br><br> (die X durch Eure echte IP Werte ersetzen) <br><br> Danach die Änderung speichern! <br><br> '''ALTERNATIV:'''<br> Solltet Ihr mit obiger Methode 2 IP Adressen hinterlegt haben (eine statische, eine von Eurem DHCP Server geliefert), dann könnt Ihr anstatt wie kürz vorher beschrieben wie folgt vorgehen: Editiert die Datei '''/etc/dhcpcd.conf''' und fügt folgende Zeilen zum Schluss ein: <code><pre>interface eth0 static ip_address=192.168.XXX.XXX/24 static routers=192.168.XXX.1 static domain_name_servers=192.168.XXX.1</pre></code> Verwendet entsprechend die passende IPs. <br><br> Ebenso muss in der '''/etc/network/interfaces''' die Zeile '''iface''' des entsprechenden Adapters auf '''manual''' gesetzt sein. Speichert die Änderung und startet neu. <br><br> Zum Schluss kümmern wir uns noch um die '''SWAP''' Datei. Diese richten wir auf doppelte Größe Eures RAMs ein. Also wenn Ihr ein pi mit 1024 MB habt, dann auf 2048MB Swap. <code><pre>sudo su echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile dphys-swapfile setup dphys-swapfile swapon</pre></code> Stellt nun noch die Sprache, Zeitzone und Tastatur ein.<br> Zeitzone: <code><pre>dpkg-reconfigure tzdata</pre></code> Sprache: <code><pre>dpkg-reconfigure locales</pre></code> ''(hier de_de UTF8 verwenden und die eng Markierung herausnehmen)'' <br><br> Tastatur: <code><pre>dpkg-reconfigure keyboard-configuration</pre></code> ''(hier die Tastatur auf German stellen. Den Rest einfach übernehmen)'' <br><br> Das war es dann schonmal. Mit einem <code><pre>reboot</pre></code> startet die Kiste neu. Wenn Ihr jetzt nur noch die pi als Server verwenden wollt, dann könnt Ihr ab jetzt die Tastatur und den Monitor weg lassen und Euch via '''ssh''' an die dafür vergebene IP Adresse einloggen und weiter konfigurieren. <br><br> Wenn es beim Login am '''ssh''' dauert, bis die Passwortabfrage kommt, dann kann es sein, dass der DNS nicht korrekt eingestellt ist. Überprüft mit einem <code><pre> cat /etc/resolv.conf</pre></code> ob der DNS korrekt auf der Kiste eingetragen ist. Falls nicht, editiert die Konfiguration entsprechend: <code><pre> nano /etc/resolv.conf</pre></code> ==Backup der Installation== Wenn man viel (gerade am Anfang) mit dem Pi experimentiert, dann macht es Sinn, seine Basisinstallation zu sichern. Man benötigt entweder ein weiteres Linux dazu (und einen Kartenleser), oder eine zweite Karte mit einem installierten Linux, um das Backup direkt am Pi zu machen. Beides verläuft ähnlich. Ich erkläre das an der Variante am Pi mit einer zusätzlichen externen Festplatte. <br><br> Startet den Pi mit einem Linux und steckt danach den Kartenleser mit Eurer Karte an, auf der sich Euer zu sicherndes System befindet. Mit einem <code><pre>fdisk -l</pre></code> findet Ihr heraus, um welches Device es sich bei Eurer Karte handelt. Bei mir ist es beispielsweise '''/dev/sdd''' <br><br> Ich lege unter '''/home''' (meine Festplatte) ein weiteres Verzeichnis an: <code><pre>mkdir /home/image</pre></code> Jetzt kopiere ich die komplette Karte in ein Image. Achtung, bei einer 16GB Karte sind das eben auch 16GB! <code><pre>dd bs=1M if=/dev/sdd of=/home/image/wheezy.img</pre></code> Dies dauert dann eine Weile. <br><br> Die Sicherung spielen wir dann wieder mit einem <code><pre>dd bs=1M if=/home/image/wheezy.img of=/dev/sdd</pre></code> Jetzt noch ein Kniff. In meinem Fall kopiere ich beispielsweise von einer 16GB Karte auf eine 32GB Karte. D.h. nun sind rund 16 GB nicht benutzt. Wheezy verteilt sich ja auf 2 Partitionen. D.h. die zweite (root) Partition kann nach hinten expandiert werden. <br><br> Dazu checken wir erstmal die die zweite Partition: <code><pre>e2fsck -f /dev/sdd2</pre></code> Danach können wir die Partition hochziehen: <code><pre>resize2fs /dev/sdd2</pre></code> Steckt die Karten nun um und testet die "geclonte" Karte auf dem PI. 99cbd5279f0cae88f533e825288ee4e36a399743 900 885 2015-11-01T18:26:51Z Admin 1 /* Kleine Nacharbeiten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br><br> Auf der Pi ein Raspbian zu installieren geht relativ einfach. Der hier beschriebene Weg funktioniert auf Basis eines beliebigen Linux auf dem Desktop. Ich verwende derzeit das aktuelle [http://www.opensuse.org openSUSE]. <br><br> Zuerst muss dazu sich eine microSD Karte angeschafft werden. Ich verwende hierfür eine 32GB Karte, 16 GB reichen aber auch erstmal aus. <br><br> Ihr benötigt zudem einen Kartenleser, damit Ihr die Karte an Eurem Linuxrechner vorbereiten könnt. Formatiert werden muss die Karte nicht. <br><br> ==Raspbian herunterladen und "installieren"== Unter Linux ladet Ihr dann erstmal das aktuelle Raspbian (zur Zeit Wheezy) herunter: <br><br> [http://www.raspberrypi.org/downloads Raspberry Downloads] <br><br> Ihr entpackt die Datei und erhaltet Damit ein Image (bin Datei). Dieses Image muss nur noch auf die Karte geschrieben werden: <code><pre>dd bs=1M if=Dateiname.bin of=/dev/sdx</pre></code> Bei Dateiname bitte den genauen Namen des Imges verwenden. Das Device '''/dev''' bitte ohne Partitionsnummer angeben. Also sollte die Karte als sde im System zu finden sein, dann '''/dev/sde'''. Solltet Ihr nicht sicher sein, welches Device die Karte im Kartenleser ist, dann mit einem <code><pre>fdisk -l</pre></code> anzeigen lassen. <br><br> ==Booten und konfigurieren== That's it! Wenn '''dd''' fertig geschrieben hat, dann die Karte in die Pi einstecken und mit dem Lan und via HDMI an einem Monitor anschließen. Zudem mindestens eine USB Tastatur dran für den Anfang. Jetzt Strom auf die Kiste geben und starten lassen. Ihr landet nach dem Boot recht schnell im Konfigurationsmenü (nur beim ersten Start):<br><br> [[Bild:raspiconf1.jpg|Konfiguration]]<br><br> '''Aktuell:''' Derzeit gibt es noch einen kleinen Fehler, der zumeist beim ersten Reboot Datenfehler auf der Karte bringt. Beendet deswegen zuerst das Programm '''raspi-config'''. Danach werdet root: <code><pre>sudo su</pre></code> Bei der Gelegenheit legt gleich mal ein eigenes Passwort für '''root''' an: <code><pre>passwd</pre></code> Jetzt aktualisiert erstmal die Firmware mit einem <code><pre>rpi-update</pre></code> Startet danach den Raspi neu. Jetzt meldet Euch als pi an. Dass Passwort ist '''raspberry'''. '''Achtung!''' Englische Tastatur! Für das y müsst Ihr deshalb z auf der deutschen Tastatur drücken <br><br> Jetzt startet den '''raspi-config''' neu: <code><pre>sudo raspi-config</pre></code> Ihr seht hier einige Konfigurationsmöglichkeiten, die man vornehmen kann und sollte. Dabei ist festzustellen, dass man hierüber viel Arbeit abgenommen bekommt. #Der erste Punkt '''"Expand Filesystem"''' ist das, was Ihr als erstes machen solltet. Das Image nutzt natürlich nicht Eure komplette SD Karte. Erst wenn Ihr diesen Punkt anstoßt, wird das Dateisystem auf den kompletten Datenspeicher ausgedehnt. #'''Change User Passwort:''' Hier könnt Ihr das Passwort des Users pi ändern. Das ist der Standarduser, der bereits eingerichtet ist und über den Ihr dann auch Root-Zugriff erlangen könnt (sudo su). Deswegen sollte hier sofort ein eigenes und sicheres Passwort gewählt werden. Das Standardpasswort lautet '''raspberry''' . Wenn Ihr später lieber mit root direkt arbeiten wollt, wie Ihr es eventuell von Debian gewohnt seid, dann könnt Ihr auch erstmal mittels '''sudo su root''' werden und danach mittels '''passwd''' ein neues Passwort für root festlegen. Danach könnt Ihr Euch direkt als Root anmelden. #'''Enable Boot to Desktop:''' Hier könnt Ihr einstellen, dass gleich die grafische Benutzeroberfläche gestartet wird. Ansonsten muss man diese manuell mit startx aktivieren. Ich mache das nicht, da wir einen Server aufbauen und ausschließlich über die Konsole arbeiten werden. #'''Internationalisation:''' Hier stellt Ihr Eure Sprache, Tastatur und Zeitzone ein. Das Menü ist selbsterklärend. <br> Wir steigen dann noch bei den '''Advanced Options''' ein:<br><br> [[Bild:Advanced.jpg|Advanced]] <br><br> Hier ist auf jeden Fall für uns der Punkt Enable remote command ('''SSH''') wichtig. Das aktivieren wir. Danach legen wir noch unseren '''Hostnamen''' fest. Jetzt starten wir die Kiste neu. Wenn Ihr wieder dieses Menü aufrufen wollt, dann startet dieses mittels <code><pre>raspi-config</pre></code> <br><br> ==Kleine Nacharbeiten== ===Kleine Helfer nachinstallieren=== Loggt Euch nochmal als '''pi''' ein und werdet '''root''': <code><pre>sudo su</pre></code> Aktualisiert erstmal die Kiste: <code><pre>apt-get update apt-get upgrade</pre></code> Ich installiere gerne noch folgende Programme nach: <code><pre>apt-get install mc htop</pre></code> <br><br> ===Netzwerkkonfiguration=== Danach nehmen wir uns noch unsere Netzwerkkonfiguration vor, solltet Ihr Eurer pi eine feste IP zuweisen wollen: <code><pre>nano /boot/cmdline.txt</pre></code> Die Datei besteht nur aus einer Zeile. Setzt hier nur hinten Eure gewünschte IP dazu:<br><br> ip=192.168.X.X<br><br> (die X durch Eure echte IP Werte ersetzen) <br><br> Danach die Änderung speichern! <br><br> '''ALTERNATIV:'''<br> Solltet Ihr mit obiger Methode 2 IP Adressen hinterlegt haben (eine statische, eine von Eurem DHCP Server geliefert), dann könnt Ihr anstatt wie kürz vorher beschrieben wie folgt vorgehen: Editiert die Datei '''/etc/dhcpcd.conf''' und fügt folgende Zeilen zum Schluss ein: <code><pre>interface eth0 static ip_address=192.168.XXX.XXX/24 static routers=192.168.XXX.1 static domain_name_servers=192.168.XXX.1</pre></code> Verwendet entsprechend die passende IPs. <br><br> Ebenso muss in der '''/etc/network/interfaces''' die Zeile '''iface''' des entsprechenden Adapters auf '''manual''' gesetzt sein. Speichert die Änderung und startet neu. <br><br> ===Die Swap Datei=== Jetzt kümmern wir uns noch um die '''SWAP''' Datei. Diese richten wir auf doppelte Größe Eures RAMs ein. Also wenn Ihr ein pi mit 1024 MB habt, dann auf 2048MB Swap. <code><pre>sudo su echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile dphys-swapfile setup dphys-swapfile swapon</pre></code> <br><br> ===Sprache und Tastatur=== Stellt nun noch die Sprache, Zeitzone und Tastatur ein.<br> Zeitzone: <code><pre>dpkg-reconfigure tzdata</pre></code> Sprache: <code><pre>dpkg-reconfigure locales</pre></code> ''(hier de_de UTF8 verwenden und die eng Markierung herausnehmen)'' <br><br> Tastatur: <code><pre>dpkg-reconfigure keyboard-configuration</pre></code> ''(hier die Tastatur auf German stellen. Den Rest einfach übernehmen)'' <br><br> ===Die Systemzeit=== Da der Raspberry Pi keine echte hardwaregestützte Systemzeit besitzt, kann es sein, dass sich der Pi mal in der Zeit verirrt. Man versucht das zwar mit dem Programm "fake-hwclock" zu stützen, aber ich habe leider selbst schon erlebt, dass nach einem Reboot die Zeit nicht mehr stimmt. <br><br> Der NTP Dämon soll zwar dafür sorgen, dass die Zeit immer wieder korrigiert wird, aber wir wollen auch hier etwas nachhelfen. <br><br> Zum einen werden wir dafür sorgen, dass nach einem Reboot die Zeit mit einem Zeitserver aktualisiert wird. Ebenso dann beim Laufenden System alle 12 Stunden. <br><br> Installiert dazu erstmal '''ntpdate''': <code><pre> apt-get install ntpdate</pre></code> Legt nun ein neues Script an: <code><pre> nano /usr/local/bin/timefix Füllt dieses Skript wie folgt: <code><pre> #!/bin/sh rm /var/log/timefix.log echo "old time" >> /var/log/timefix.log date >> /var/log/timefix.log echo "" >> /var/log/timefix.log /etc/init.d/ntp stop echo "[...] updating time clock" /usr/sbin/ntpdate ptbtime1.ptb.de >> /var/log/timefix.log echo "Done!" /etc/init.d/ntp start echo "" >> /var/log/timefix.log echo "new time" >> /var/log/timefix.log date >> /var/log/timefix.log</pre></code> Dieses Skript muss ausführbar gemacht werden: <code><pre> chmod +x /usr/local/bin/timefix</pre></code> Nun legen wir in der crontab fest, dass das Skriptalle 12 Stunden gestartet werden soll: <code><pre> crontab -e</pre></code> Für fügen folgende Zeilen ein: <code><pre> # Timefix every 12 hours 0 */12 * * * /usr/local/bin/timefix > /dev/null</pre></code> Damit die Zeit kurz nach dem Booten ausgeführt wird editieren wir die /etc/rc.local . Dort fügen wir VOR dem exit 0 folgendes ein: <code><pre> /etc/init.d/ntp stop echo "wait 10 seconds" sleep 10 echo "updating timeclock" /usr/sbin/ntpdate ptbtime1.ptb.de /etc/init.d/ntp start</pre></code> Das war es dann schonmal. Mit einem <code><pre>reboot</pre></code> startet die Kiste neu. <br><br> ===Langsamer ssh login=== Wenn Ihr jetzt nur noch die pi als Server verwenden wollt, dann könnt Ihr ab jetzt die Tastatur und den Monitor weg lassen und Euch via '''ssh''' an die dafür vergebene IP Adresse einloggen und weiter konfigurieren. <br><br> Wenn es beim Login am '''ssh''' dauert, bis die Passwortabfrage kommt, dann kann es sein, dass der DNS nicht korrekt eingestellt ist. Überprüft mit einem <code><pre> cat /etc/resolv.conf</pre></code> ob der DNS korrekt auf der Kiste eingetragen ist. Falls nicht, editiert die Konfiguration entsprechend: <code><pre> nano /etc/resolv.conf</pre></code> <br><br> ==Backup der Installation== Wenn man viel (gerade am Anfang) mit dem Pi experimentiert, dann macht es Sinn, seine Basisinstallation zu sichern. Man benötigt entweder ein weiteres Linux dazu (und einen Kartenleser), oder eine zweite Karte mit einem installierten Linux, um das Backup direkt am Pi zu machen. Beides verläuft ähnlich. Ich erkläre das an der Variante am Pi mit einer zusätzlichen externen Festplatte. <br><br> Startet den Pi mit einem Linux und steckt danach den Kartenleser mit Eurer Karte an, auf der sich Euer zu sicherndes System befindet. Mit einem <code><pre>fdisk -l</pre></code> findet Ihr heraus, um welches Device es sich bei Eurer Karte handelt. Bei mir ist es beispielsweise '''/dev/sdd''' <br><br> Ich lege unter '''/home''' (meine Festplatte) ein weiteres Verzeichnis an: <code><pre>mkdir /home/image</pre></code> Jetzt kopiere ich die komplette Karte in ein Image. Achtung, bei einer 16GB Karte sind das eben auch 16GB! <code><pre>dd bs=1M if=/dev/sdd of=/home/image/wheezy.img</pre></code> Dies dauert dann eine Weile. <br><br> Die Sicherung spielen wir dann wieder mit einem <code><pre>dd bs=1M if=/home/image/wheezy.img of=/dev/sdd</pre></code> Jetzt noch ein Kniff. In meinem Fall kopiere ich beispielsweise von einer 16GB Karte auf eine 32GB Karte. D.h. nun sind rund 16 GB nicht benutzt. Wheezy verteilt sich ja auf 2 Partitionen. D.h. die zweite (root) Partition kann nach hinten expandiert werden. <br><br> Dazu checken wir erstmal die die zweite Partition: <code><pre>e2fsck -f /dev/sdd2</pre></code> Danach können wir die Partition hochziehen: <code><pre>resize2fs /dev/sdd2</pre></code> Steckt die Karten nun um und testet die "geclonte" Karte auf dem PI. 8a2280cdfa8371abbffb7e1bc836846778eeefab 901 900 2015-11-01T18:27:12Z Admin 1 /* Netzwerkkonfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br><br> Auf der Pi ein Raspbian zu installieren geht relativ einfach. Der hier beschriebene Weg funktioniert auf Basis eines beliebigen Linux auf dem Desktop. Ich verwende derzeit das aktuelle [http://www.opensuse.org openSUSE]. <br><br> Zuerst muss dazu sich eine microSD Karte angeschafft werden. Ich verwende hierfür eine 32GB Karte, 16 GB reichen aber auch erstmal aus. <br><br> Ihr benötigt zudem einen Kartenleser, damit Ihr die Karte an Eurem Linuxrechner vorbereiten könnt. Formatiert werden muss die Karte nicht. <br><br> ==Raspbian herunterladen und "installieren"== Unter Linux ladet Ihr dann erstmal das aktuelle Raspbian (zur Zeit Wheezy) herunter: <br><br> [http://www.raspberrypi.org/downloads Raspberry Downloads] <br><br> Ihr entpackt die Datei und erhaltet Damit ein Image (bin Datei). Dieses Image muss nur noch auf die Karte geschrieben werden: <code><pre>dd bs=1M if=Dateiname.bin of=/dev/sdx</pre></code> Bei Dateiname bitte den genauen Namen des Imges verwenden. Das Device '''/dev''' bitte ohne Partitionsnummer angeben. Also sollte die Karte als sde im System zu finden sein, dann '''/dev/sde'''. Solltet Ihr nicht sicher sein, welches Device die Karte im Kartenleser ist, dann mit einem <code><pre>fdisk -l</pre></code> anzeigen lassen. <br><br> ==Booten und konfigurieren== That's it! Wenn '''dd''' fertig geschrieben hat, dann die Karte in die Pi einstecken und mit dem Lan und via HDMI an einem Monitor anschließen. Zudem mindestens eine USB Tastatur dran für den Anfang. Jetzt Strom auf die Kiste geben und starten lassen. Ihr landet nach dem Boot recht schnell im Konfigurationsmenü (nur beim ersten Start):<br><br> [[Bild:raspiconf1.jpg|Konfiguration]]<br><br> '''Aktuell:''' Derzeit gibt es noch einen kleinen Fehler, der zumeist beim ersten Reboot Datenfehler auf der Karte bringt. Beendet deswegen zuerst das Programm '''raspi-config'''. Danach werdet root: <code><pre>sudo su</pre></code> Bei der Gelegenheit legt gleich mal ein eigenes Passwort für '''root''' an: <code><pre>passwd</pre></code> Jetzt aktualisiert erstmal die Firmware mit einem <code><pre>rpi-update</pre></code> Startet danach den Raspi neu. Jetzt meldet Euch als pi an. Dass Passwort ist '''raspberry'''. '''Achtung!''' Englische Tastatur! Für das y müsst Ihr deshalb z auf der deutschen Tastatur drücken <br><br> Jetzt startet den '''raspi-config''' neu: <code><pre>sudo raspi-config</pre></code> Ihr seht hier einige Konfigurationsmöglichkeiten, die man vornehmen kann und sollte. Dabei ist festzustellen, dass man hierüber viel Arbeit abgenommen bekommt. #Der erste Punkt '''"Expand Filesystem"''' ist das, was Ihr als erstes machen solltet. Das Image nutzt natürlich nicht Eure komplette SD Karte. Erst wenn Ihr diesen Punkt anstoßt, wird das Dateisystem auf den kompletten Datenspeicher ausgedehnt. #'''Change User Passwort:''' Hier könnt Ihr das Passwort des Users pi ändern. Das ist der Standarduser, der bereits eingerichtet ist und über den Ihr dann auch Root-Zugriff erlangen könnt (sudo su). Deswegen sollte hier sofort ein eigenes und sicheres Passwort gewählt werden. Das Standardpasswort lautet '''raspberry''' . Wenn Ihr später lieber mit root direkt arbeiten wollt, wie Ihr es eventuell von Debian gewohnt seid, dann könnt Ihr auch erstmal mittels '''sudo su root''' werden und danach mittels '''passwd''' ein neues Passwort für root festlegen. Danach könnt Ihr Euch direkt als Root anmelden. #'''Enable Boot to Desktop:''' Hier könnt Ihr einstellen, dass gleich die grafische Benutzeroberfläche gestartet wird. Ansonsten muss man diese manuell mit startx aktivieren. Ich mache das nicht, da wir einen Server aufbauen und ausschließlich über die Konsole arbeiten werden. #'''Internationalisation:''' Hier stellt Ihr Eure Sprache, Tastatur und Zeitzone ein. Das Menü ist selbsterklärend. <br> Wir steigen dann noch bei den '''Advanced Options''' ein:<br><br> [[Bild:Advanced.jpg|Advanced]] <br><br> Hier ist auf jeden Fall für uns der Punkt Enable remote command ('''SSH''') wichtig. Das aktivieren wir. Danach legen wir noch unseren '''Hostnamen''' fest. Jetzt starten wir die Kiste neu. Wenn Ihr wieder dieses Menü aufrufen wollt, dann startet dieses mittels <code><pre>raspi-config</pre></code> <br><br> ==Kleine Nacharbeiten== ===Kleine Helfer nachinstallieren=== Loggt Euch nochmal als '''pi''' ein und werdet '''root''': <code><pre>sudo su</pre></code> Aktualisiert erstmal die Kiste: <code><pre>apt-get update apt-get upgrade</pre></code> Ich installiere gerne noch folgende Programme nach: <code><pre>apt-get install mc htop</pre></code> <br><br> ===Netzwerkkonfiguration=== Danach nehmen wir uns noch unsere Netzwerkkonfiguration vor, solltet Ihr Eurer pi eine feste IP zuweisen wollen: <code><pre>nano /boot/cmdline.txt</pre></code> Die Datei besteht nur aus einer Zeile. Setzt hier nur hinten Eure gewünschte IP dazu:<br><br> '''ip=192.168.X.X'''<br><br> (die X durch Eure echte IP Werte ersetzen) <br><br> Danach die Änderung speichern! <br><br> '''ALTERNATIV:'''<br> Solltet Ihr mit obiger Methode 2 IP Adressen hinterlegt haben (eine statische, eine von Eurem DHCP Server geliefert), dann könnt Ihr anstatt wie kürz vorher beschrieben wie folgt vorgehen: Editiert die Datei '''/etc/dhcpcd.conf''' und fügt folgende Zeilen zum Schluss ein: <code><pre>interface eth0 static ip_address=192.168.XXX.XXX/24 static routers=192.168.XXX.1 static domain_name_servers=192.168.XXX.1</pre></code> Verwendet entsprechend die passende IPs. <br><br> Ebenso muss in der '''/etc/network/interfaces''' die Zeile '''iface''' des entsprechenden Adapters auf '''manual''' gesetzt sein. Speichert die Änderung und startet neu. <br><br> ===Die Swap Datei=== Jetzt kümmern wir uns noch um die '''SWAP''' Datei. Diese richten wir auf doppelte Größe Eures RAMs ein. Also wenn Ihr ein pi mit 1024 MB habt, dann auf 2048MB Swap. <code><pre>sudo su echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile dphys-swapfile setup dphys-swapfile swapon</pre></code> <br><br> ===Sprache und Tastatur=== Stellt nun noch die Sprache, Zeitzone und Tastatur ein.<br> Zeitzone: <code><pre>dpkg-reconfigure tzdata</pre></code> Sprache: <code><pre>dpkg-reconfigure locales</pre></code> ''(hier de_de UTF8 verwenden und die eng Markierung herausnehmen)'' <br><br> Tastatur: <code><pre>dpkg-reconfigure keyboard-configuration</pre></code> ''(hier die Tastatur auf German stellen. Den Rest einfach übernehmen)'' <br><br> ===Die Systemzeit=== Da der Raspberry Pi keine echte hardwaregestützte Systemzeit besitzt, kann es sein, dass sich der Pi mal in der Zeit verirrt. Man versucht das zwar mit dem Programm "fake-hwclock" zu stützen, aber ich habe leider selbst schon erlebt, dass nach einem Reboot die Zeit nicht mehr stimmt. <br><br> Der NTP Dämon soll zwar dafür sorgen, dass die Zeit immer wieder korrigiert wird, aber wir wollen auch hier etwas nachhelfen. <br><br> Zum einen werden wir dafür sorgen, dass nach einem Reboot die Zeit mit einem Zeitserver aktualisiert wird. Ebenso dann beim Laufenden System alle 12 Stunden. <br><br> Installiert dazu erstmal '''ntpdate''': <code><pre> apt-get install ntpdate</pre></code> Legt nun ein neues Script an: <code><pre> nano /usr/local/bin/timefix Füllt dieses Skript wie folgt: <code><pre> #!/bin/sh rm /var/log/timefix.log echo "old time" >> /var/log/timefix.log date >> /var/log/timefix.log echo "" >> /var/log/timefix.log /etc/init.d/ntp stop echo "[...] updating time clock" /usr/sbin/ntpdate ptbtime1.ptb.de >> /var/log/timefix.log echo "Done!" /etc/init.d/ntp start echo "" >> /var/log/timefix.log echo "new time" >> /var/log/timefix.log date >> /var/log/timefix.log</pre></code> Dieses Skript muss ausführbar gemacht werden: <code><pre> chmod +x /usr/local/bin/timefix</pre></code> Nun legen wir in der crontab fest, dass das Skriptalle 12 Stunden gestartet werden soll: <code><pre> crontab -e</pre></code> Für fügen folgende Zeilen ein: <code><pre> # Timefix every 12 hours 0 */12 * * * /usr/local/bin/timefix > /dev/null</pre></code> Damit die Zeit kurz nach dem Booten ausgeführt wird editieren wir die /etc/rc.local . Dort fügen wir VOR dem exit 0 folgendes ein: <code><pre> /etc/init.d/ntp stop echo "wait 10 seconds" sleep 10 echo "updating timeclock" /usr/sbin/ntpdate ptbtime1.ptb.de /etc/init.d/ntp start</pre></code> Das war es dann schonmal. Mit einem <code><pre>reboot</pre></code> startet die Kiste neu. <br><br> ===Langsamer ssh login=== Wenn Ihr jetzt nur noch die pi als Server verwenden wollt, dann könnt Ihr ab jetzt die Tastatur und den Monitor weg lassen und Euch via '''ssh''' an die dafür vergebene IP Adresse einloggen und weiter konfigurieren. <br><br> Wenn es beim Login am '''ssh''' dauert, bis die Passwortabfrage kommt, dann kann es sein, dass der DNS nicht korrekt eingestellt ist. Überprüft mit einem <code><pre> cat /etc/resolv.conf</pre></code> ob der DNS korrekt auf der Kiste eingetragen ist. Falls nicht, editiert die Konfiguration entsprechend: <code><pre> nano /etc/resolv.conf</pre></code> <br><br> ==Backup der Installation== Wenn man viel (gerade am Anfang) mit dem Pi experimentiert, dann macht es Sinn, seine Basisinstallation zu sichern. Man benötigt entweder ein weiteres Linux dazu (und einen Kartenleser), oder eine zweite Karte mit einem installierten Linux, um das Backup direkt am Pi zu machen. Beides verläuft ähnlich. Ich erkläre das an der Variante am Pi mit einer zusätzlichen externen Festplatte. <br><br> Startet den Pi mit einem Linux und steckt danach den Kartenleser mit Eurer Karte an, auf der sich Euer zu sicherndes System befindet. Mit einem <code><pre>fdisk -l</pre></code> findet Ihr heraus, um welches Device es sich bei Eurer Karte handelt. Bei mir ist es beispielsweise '''/dev/sdd''' <br><br> Ich lege unter '''/home''' (meine Festplatte) ein weiteres Verzeichnis an: <code><pre>mkdir /home/image</pre></code> Jetzt kopiere ich die komplette Karte in ein Image. Achtung, bei einer 16GB Karte sind das eben auch 16GB! <code><pre>dd bs=1M if=/dev/sdd of=/home/image/wheezy.img</pre></code> Dies dauert dann eine Weile. <br><br> Die Sicherung spielen wir dann wieder mit einem <code><pre>dd bs=1M if=/home/image/wheezy.img of=/dev/sdd</pre></code> Jetzt noch ein Kniff. In meinem Fall kopiere ich beispielsweise von einer 16GB Karte auf eine 32GB Karte. D.h. nun sind rund 16 GB nicht benutzt. Wheezy verteilt sich ja auf 2 Partitionen. D.h. die zweite (root) Partition kann nach hinten expandiert werden. <br><br> Dazu checken wir erstmal die die zweite Partition: <code><pre>e2fsck -f /dev/sdd2</pre></code> Danach können wir die Partition hochziehen: <code><pre>resize2fs /dev/sdd2</pre></code> Steckt die Karten nun um und testet die "geclonte" Karte auf dem PI. 951dda6bbfbd7b5cd86aa849022cda069908bc1d 902 901 2015-11-02T12:07:31Z Admin 1 /* Die Systemzeit */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> [[Bild:raspiinbox.jpg|In der Box]]<br><br> Auf der Pi ein Raspbian zu installieren geht relativ einfach. Der hier beschriebene Weg funktioniert auf Basis eines beliebigen Linux auf dem Desktop. Ich verwende derzeit das aktuelle [http://www.opensuse.org openSUSE]. <br><br> Zuerst muss dazu sich eine microSD Karte angeschafft werden. Ich verwende hierfür eine 32GB Karte, 16 GB reichen aber auch erstmal aus. <br><br> Ihr benötigt zudem einen Kartenleser, damit Ihr die Karte an Eurem Linuxrechner vorbereiten könnt. Formatiert werden muss die Karte nicht. <br><br> ==Raspbian herunterladen und "installieren"== Unter Linux ladet Ihr dann erstmal das aktuelle Raspbian (zur Zeit Wheezy) herunter: <br><br> [http://www.raspberrypi.org/downloads Raspberry Downloads] <br><br> Ihr entpackt die Datei und erhaltet Damit ein Image (bin Datei). Dieses Image muss nur noch auf die Karte geschrieben werden: <code><pre>dd bs=1M if=Dateiname.bin of=/dev/sdx</pre></code> Bei Dateiname bitte den genauen Namen des Imges verwenden. Das Device '''/dev''' bitte ohne Partitionsnummer angeben. Also sollte die Karte als sde im System zu finden sein, dann '''/dev/sde'''. Solltet Ihr nicht sicher sein, welches Device die Karte im Kartenleser ist, dann mit einem <code><pre>fdisk -l</pre></code> anzeigen lassen. <br><br> ==Booten und konfigurieren== That's it! Wenn '''dd''' fertig geschrieben hat, dann die Karte in die Pi einstecken und mit dem Lan und via HDMI an einem Monitor anschließen. Zudem mindestens eine USB Tastatur dran für den Anfang. Jetzt Strom auf die Kiste geben und starten lassen. Ihr landet nach dem Boot recht schnell im Konfigurationsmenü (nur beim ersten Start):<br><br> [[Bild:raspiconf1.jpg|Konfiguration]]<br><br> '''Aktuell:''' Derzeit gibt es noch einen kleinen Fehler, der zumeist beim ersten Reboot Datenfehler auf der Karte bringt. Beendet deswegen zuerst das Programm '''raspi-config'''. Danach werdet root: <code><pre>sudo su</pre></code> Bei der Gelegenheit legt gleich mal ein eigenes Passwort für '''root''' an: <code><pre>passwd</pre></code> Jetzt aktualisiert erstmal die Firmware mit einem <code><pre>rpi-update</pre></code> Startet danach den Raspi neu. Jetzt meldet Euch als pi an. Dass Passwort ist '''raspberry'''. '''Achtung!''' Englische Tastatur! Für das y müsst Ihr deshalb z auf der deutschen Tastatur drücken <br><br> Jetzt startet den '''raspi-config''' neu: <code><pre>sudo raspi-config</pre></code> Ihr seht hier einige Konfigurationsmöglichkeiten, die man vornehmen kann und sollte. Dabei ist festzustellen, dass man hierüber viel Arbeit abgenommen bekommt. #Der erste Punkt '''"Expand Filesystem"''' ist das, was Ihr als erstes machen solltet. Das Image nutzt natürlich nicht Eure komplette SD Karte. Erst wenn Ihr diesen Punkt anstoßt, wird das Dateisystem auf den kompletten Datenspeicher ausgedehnt. #'''Change User Passwort:''' Hier könnt Ihr das Passwort des Users pi ändern. Das ist der Standarduser, der bereits eingerichtet ist und über den Ihr dann auch Root-Zugriff erlangen könnt (sudo su). Deswegen sollte hier sofort ein eigenes und sicheres Passwort gewählt werden. Das Standardpasswort lautet '''raspberry''' . Wenn Ihr später lieber mit root direkt arbeiten wollt, wie Ihr es eventuell von Debian gewohnt seid, dann könnt Ihr auch erstmal mittels '''sudo su root''' werden und danach mittels '''passwd''' ein neues Passwort für root festlegen. Danach könnt Ihr Euch direkt als Root anmelden. #'''Enable Boot to Desktop:''' Hier könnt Ihr einstellen, dass gleich die grafische Benutzeroberfläche gestartet wird. Ansonsten muss man diese manuell mit startx aktivieren. Ich mache das nicht, da wir einen Server aufbauen und ausschließlich über die Konsole arbeiten werden. #'''Internationalisation:''' Hier stellt Ihr Eure Sprache, Tastatur und Zeitzone ein. Das Menü ist selbsterklärend. <br> Wir steigen dann noch bei den '''Advanced Options''' ein:<br><br> [[Bild:Advanced.jpg|Advanced]] <br><br> Hier ist auf jeden Fall für uns der Punkt Enable remote command ('''SSH''') wichtig. Das aktivieren wir. Danach legen wir noch unseren '''Hostnamen''' fest. Jetzt starten wir die Kiste neu. Wenn Ihr wieder dieses Menü aufrufen wollt, dann startet dieses mittels <code><pre>raspi-config</pre></code> <br><br> ==Kleine Nacharbeiten== ===Kleine Helfer nachinstallieren=== Loggt Euch nochmal als '''pi''' ein und werdet '''root''': <code><pre>sudo su</pre></code> Aktualisiert erstmal die Kiste: <code><pre>apt-get update apt-get upgrade</pre></code> Ich installiere gerne noch folgende Programme nach: <code><pre>apt-get install mc htop</pre></code> <br><br> ===Netzwerkkonfiguration=== Danach nehmen wir uns noch unsere Netzwerkkonfiguration vor, solltet Ihr Eurer pi eine feste IP zuweisen wollen: <code><pre>nano /boot/cmdline.txt</pre></code> Die Datei besteht nur aus einer Zeile. Setzt hier nur hinten Eure gewünschte IP dazu:<br><br> '''ip=192.168.X.X'''<br><br> (die X durch Eure echte IP Werte ersetzen) <br><br> Danach die Änderung speichern! <br><br> '''ALTERNATIV:'''<br> Solltet Ihr mit obiger Methode 2 IP Adressen hinterlegt haben (eine statische, eine von Eurem DHCP Server geliefert), dann könnt Ihr anstatt wie kürz vorher beschrieben wie folgt vorgehen: Editiert die Datei '''/etc/dhcpcd.conf''' und fügt folgende Zeilen zum Schluss ein: <code><pre>interface eth0 static ip_address=192.168.XXX.XXX/24 static routers=192.168.XXX.1 static domain_name_servers=192.168.XXX.1</pre></code> Verwendet entsprechend die passende IPs. <br><br> Ebenso muss in der '''/etc/network/interfaces''' die Zeile '''iface''' des entsprechenden Adapters auf '''manual''' gesetzt sein. Speichert die Änderung und startet neu. <br><br> ===Die Swap Datei=== Jetzt kümmern wir uns noch um die '''SWAP''' Datei. Diese richten wir auf doppelte Größe Eures RAMs ein. Also wenn Ihr ein pi mit 1024 MB habt, dann auf 2048MB Swap. <code><pre>sudo su echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile dphys-swapfile setup dphys-swapfile swapon</pre></code> <br><br> ===Sprache und Tastatur=== Stellt nun noch die Sprache, Zeitzone und Tastatur ein.<br> Zeitzone: <code><pre>dpkg-reconfigure tzdata</pre></code> Sprache: <code><pre>dpkg-reconfigure locales</pre></code> ''(hier de_de UTF8 verwenden und die eng Markierung herausnehmen)'' <br><br> Tastatur: <code><pre>dpkg-reconfigure keyboard-configuration</pre></code> ''(hier die Tastatur auf German stellen. Den Rest einfach übernehmen)'' <br><br> ===Die Systemzeit=== Da der Raspberry Pi keine echte hardwaregestützte Systemzeit besitzt, kann es sein, dass sich der Pi mal in der Zeit verirrt. Man versucht das zwar mit dem Programm "fake-hwclock" zu stützen, aber ich habe leider selbst schon erlebt, dass nach einem Reboot die Zeit nicht mehr stimmt. <br><br> Der NTP Dämon soll zwar dafür sorgen, dass die Zeit immer wieder korrigiert wird, aber wir wollen auch hier etwas nachhelfen. <br><br> Zum einen werden wir dafür sorgen, dass nach einem Reboot die Zeit mit einem Zeitserver aktualisiert wird. Ebenso dann beim Laufenden System alle 12 Stunden. <br><br> Installiert dazu erstmal '''ntpdate''': <code><pre> apt-get install ntpdate</pre></code> Legt nun ein neues Script an: <code><pre> nano /usr/local/bin/timefix</pre></code> Füllt dieses Skript wie folgt: <code><pre> #!/bin/sh rm /var/log/timefix.log echo "old time" >> /var/log/timefix.log date >> /var/log/timefix.log echo "" >> /var/log/timefix.log /etc/init.d/ntp stop echo "[...] updating time clock" /usr/sbin/ntpdate ptbtime1.ptb.de >> /var/log/timefix.log echo "Done!" /etc/init.d/ntp start echo "" >> /var/log/timefix.log echo "new time" >> /var/log/timefix.log date >> /var/log/timefix.log</pre></code> Dieses Skript muss ausführbar gemacht werden: <code><pre> chmod +x /usr/local/bin/timefix</pre></code> Nun legen wir in der crontab fest, dass das Skriptalle 12 Stunden gestartet werden soll: <code><pre> crontab -e</pre></code> Für fügen folgende Zeilen ein: <code><pre> # Timefix every 12 hours 0 */12 * * * /usr/local/bin/timefix > /dev/null</pre></code> Damit die Zeit kurz nach dem Booten ausgeführt wird editieren wir die /etc/rc.local . Dort fügen wir VOR dem exit 0 folgendes ein: <code><pre> /etc/init.d/ntp stop echo "wait 10 seconds" sleep 10 echo "updating timeclock" /usr/sbin/ntpdate ptbtime1.ptb.de /etc/init.d/ntp start</pre></code> Das war es dann schonmal. Mit einem <code><pre>reboot</pre></code> startet die Kiste neu. <br><br> ===Langsamer ssh login=== Wenn Ihr jetzt nur noch die pi als Server verwenden wollt, dann könnt Ihr ab jetzt die Tastatur und den Monitor weg lassen und Euch via '''ssh''' an die dafür vergebene IP Adresse einloggen und weiter konfigurieren. <br><br> Wenn es beim Login am '''ssh''' dauert, bis die Passwortabfrage kommt, dann kann es sein, dass der DNS nicht korrekt eingestellt ist. Überprüft mit einem <code><pre> cat /etc/resolv.conf</pre></code> ob der DNS korrekt auf der Kiste eingetragen ist. Falls nicht, editiert die Konfiguration entsprechend: <code><pre> nano /etc/resolv.conf</pre></code> <br><br> ==Backup der Installation== Wenn man viel (gerade am Anfang) mit dem Pi experimentiert, dann macht es Sinn, seine Basisinstallation zu sichern. Man benötigt entweder ein weiteres Linux dazu (und einen Kartenleser), oder eine zweite Karte mit einem installierten Linux, um das Backup direkt am Pi zu machen. Beides verläuft ähnlich. Ich erkläre das an der Variante am Pi mit einer zusätzlichen externen Festplatte. <br><br> Startet den Pi mit einem Linux und steckt danach den Kartenleser mit Eurer Karte an, auf der sich Euer zu sicherndes System befindet. Mit einem <code><pre>fdisk -l</pre></code> findet Ihr heraus, um welches Device es sich bei Eurer Karte handelt. Bei mir ist es beispielsweise '''/dev/sdd''' <br><br> Ich lege unter '''/home''' (meine Festplatte) ein weiteres Verzeichnis an: <code><pre>mkdir /home/image</pre></code> Jetzt kopiere ich die komplette Karte in ein Image. Achtung, bei einer 16GB Karte sind das eben auch 16GB! <code><pre>dd bs=1M if=/dev/sdd of=/home/image/wheezy.img</pre></code> Dies dauert dann eine Weile. <br><br> Die Sicherung spielen wir dann wieder mit einem <code><pre>dd bs=1M if=/home/image/wheezy.img of=/dev/sdd</pre></code> Jetzt noch ein Kniff. In meinem Fall kopiere ich beispielsweise von einer 16GB Karte auf eine 32GB Karte. D.h. nun sind rund 16 GB nicht benutzt. Wheezy verteilt sich ja auf 2 Partitionen. D.h. die zweite (root) Partition kann nach hinten expandiert werden. <br><br> Dazu checken wir erstmal die die zweite Partition: <code><pre>e2fsck -f /dev/sdd2</pre></code> Danach können wir die Partition hochziehen: <code><pre>resize2fs /dev/sdd2</pre></code> Steckt die Karten nun um und testet die "geclonte" Karte auf dem PI. 49b3b8875cc47cd91c0fb2b62bbd525bf270ccf2 Apache, PHP und mySQL 0 95 886 863 2015-10-28T18:29:19Z Admin 1 /* Ein Serverzertifikat für https anlegen */ wikitext text/x-wiki ==Apache installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01 legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Ein Serverzertifikat für https anlegen== Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default.conf</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin): <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /phpmayadmin /usr/share/phpmyadmin <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> 78ee222ebd04d087ce65a6d26105dbacf2e2df5d 891 886 2015-10-30T19:40:07Z Admin 1 /* mySQL installieren */ wikitext text/x-wiki ==Apache installieren== Der Apache 2 Webserver ist auf Linux schnell installiert. Führt dazu folgenden Befehl aus: <code><pre>apt-get install apache2 php5 libapache2-mod-php5</pre></code> Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis: <br><br> '''/etc/apache2/''' <br><br> Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein: <code><pre>/etc/init.d/apache2 restart</pre></code> Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt: <code><pre>nano /etc/apache2/conf.d/fqdn</pre></code> Fügt dann folgende Zeile ein: <code><pre>ServerName localhost</pre></code> Speichert die Änderung und startet den Apache2 neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==mySQL installieren== Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit <code><pre>apt-get install php5-mysql mysql-server mysql-client</pre></code> installieren. Setzt dann erstmal ein Passwort für mysql: <code><pre>mysqladmin -u root password DEIN_GEHEIMES_PASSWORT</pre></code> (dies wird auch bereits bei der Installation des mysql Pakets abgefragt. Mit einem <code><pre>mysqladmin -p create tabelle01</pre></code> legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem <code><pre>mysqladmin -p drop tabelle01</pre></code> wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt: <code><pre>Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'tabelle01' database [y/N] y Database "tabelle01" dropped</pre></code> Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:<br> '''phpinfo.php''' <code><pre> <?php phpinfo(); ?></pre></code> Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen. <br><br> ==APC Caching installieren== Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein <code><pre>apt-get install php-pear php-apc</pre></code> Startet den Webserver neu: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Ein Serverzertifikat für https anlegen== Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default.conf</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin): <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /phpmayadmin /usr/share/phpmyadmin <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> b67f8a177963d3d04d883f66de89ee7ec4ecf51f Mediawiki installieren und nutzen 0 238 892 858 2015-10-30T20:45:30Z Admin 1 /* Sidebar bearbeiten */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:mediawiki_logo.jpg|Logo]] </div> <br> Die Mediawiki dürfte jeden von der Wikipedia her bekannt sein. Die meisten nutzen die Software, wenige aber wissen, wie diese funktioniert. Im Grunde schade, da die Mediawiki eine mächtige Software ist, die ihre Muskeln im Bereich der Dokumentenverwaltung spielen lässt. Auch viele kleine technische Projekte nutzen die Mediawiki. <br><br><br> Ziel dieses Tutorials wird sein: :* Installieren der Mediawiki auf dem Webserver an der Konsole (ssh Zugriff) :* Grundlegende erste Schritte und einfache Anpassungen :* Erweiterung der Software um ein Mobile Frontend :* Umzug / Sicherung einer mySQL Datenbank Voraussetzung ist ein Linux Webserver mit :* ssh Zugang :* Apache2 Webserver mit PHP und mySQL :* Einwenig Geduld Wenn all diese Dinge vorhanden sind, dann machen wir uns ans Werk ... <br><br> ==Eine leere Datenbank anlegen== Zuerst benötigen wir eine neue leere mySQL Datenbank. Hierzu empfiehlt es sich, einen eigenen Datenbank-User (falls noch nicht geschehen) anzulegen. Gebt folgendes als Root ein: <code><pre>mysql -p</pre></code> Danach an der Konsole folgende Befehle eingeben: <code><pre>CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost'; FLUSH PRIVILEGES; exit</pre></code> '''neueruser''': Das ist der Username für den mySQL Nutzer<br> '''password''': Das ist sein Passwort<br> ''Bitte entsprechend anpassen!''<br><br> Nun legen wir für den Nutzer noch eine neue Datenbank an: <code><pre>mysqladmin -uneueruser -p create tabelle01</pre></code> Beachtet hier die Parameter '''-u''' und '''-p'''. Beim Parameter '''-u''' schreibt Euren Nutzernamen direkt dahinter. <br><br> ==Mediawiki downloaden, entpacken und vorbereiten== Wir laden nun die Software herunter. Dazu wechselt in das dafür vorgesehene Verzeichnis auf Eurem Server. Ich verwende jetzt einfach einmal das Standard Verzeichnis '''/var/www/''' , Ihr könnt aber ein anderes beliebiges verwenden. <code><pre>cd /var/www</pre></code> Wir holen uns nun die Software. Unter dem [https://www.mediawiki.org/wiki/Download Mediawiki Downloadbereich] findet Ihr immer die aktuelle Version und den Downloadlink. Passt folgenden Befehl entsprechend der aktuellen Version an: <code><pre>wget http://releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.1.tar.gz </pre></code> Entpackt wird das dann mit einem <code><pre>tar -zvxf mediawiki-1.25.1.tar.gz</pre></code> Ihr habt jetzt ein neues Verzeichnis mediawiki-1.25.1 . Je nach Geschmack lasst Ihr den Namen so, benennt das Verzeichnis um, oder setzt einen Symlink. Wer gerne mit Versionen experimentiert, wird wohl den Link verwenden, den er dann einfach von Version auf Version umhängt.<br> Variante umbenennen: <code><pre>mv /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Variante Link: <code><pre>ln -s /var/www/mediawiki-1.25.1 /var/www/mediawiki</pre></code> Jetzt verschaffen wir noch einen Zugriff auf das Verzeichnis für unseren Apache Webserver: <code><pre>chown -R root:www-data /var/www/mediawiki chmod 750 -R /var/www/mediawiki </pre></code> Und noch Schreibrechte für den Upload von Bildern (falls gewünscht): <code><pre>chmod 770 -R /var/www/mediawiki/images </pre></code> <br><br> ==Apache 2 konfigurieren== Jetzt binden wir noch einen Alias in unsere Apache2 Konfiguration mit ein. <code><pre>nano /etc/apache2/sites-enabled/@000-default</pre></code> Im Bereich '''<VirtualHost *:80>''' und / oder '''<VirtualHost *:443>''' fügt folgenden Abschnitt mit ein: <code><pre>Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </pre></code> Die Zeile '''Alias /mediawiki /var/www/mediawiki''' legt fest, dass Ihr Eure Wiki mittels '''EURE_WEB_ADRESSE/mediawiki''' aufrufen könnt. Das macht Sinn, wenn noch andere Webanwendungen auf dem Server liegen. Wollt Ihr, dass die Wiki direkt über Eure Adresse aufgerufen wird, dann könnt Ihr dies direkt im Abschnitt '''<VirtualHost *:80>''' regeln: <code><pre> <VirtualHost *:80> ServerName EUER_SERVERNAME ServerAlias EUER_SERVERNAME XXX.XXX.XX.XX ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/mediawiki> ... </Directory></pre></code> Speichert die Änderung ab und startet den Apache neu durch: <code><pre>/etc/init.d/apache2 restart</pre></code> <br><br> ==Mediawiki einrichten== Ruft nun Eure Mediawiki in Eurem Browser auf (wir gehen jetzt von der Variante /mediawiki aus, ansonsten einfach nur die Domäne aufrufen)<br><br> '''EUER_DOMÄNE/mediawiki''' <br><br> Wir bekommen sogleich folgenden Hinweis:<br><br> [[Bild:wiki_01.jpg|Wiki1]]<br><br> Klickt auf den angezeigten Link und wir können mit der Konfiguration beginnen. Stellt die gewünschte Sprache ein und klickt auf weiter ...<br><br> [[Bild:wiki_02.jpg|Wiki2]]<br><br> Auf der folgenden Seite bekommt Ihr unter Umständen Hinweise zu falschen Serverkonfigurationen, oder falls eine Datei fehlen sollte. Wenn alles okay ist, geht auch hier auf weiter...<br><br> [[Bild:wiki_03.jpg|Wiki3]]<br><br> Im nächsten Dialog muss nun die Datenbank angebunden werden:<br><br> [[Bild:wiki_04.jpg|Wiki4]]<br><br> Danach folgen grundlegende Einstellungen zur Datenbank. Ich empfehle folgende:<br><br> [[Bild:wiki_05.jpg|Wiki5]]<br><br> Danach legen wir unseren ersten Nutzer fest und wollen noch weitere Einstellungen vornehmen:<br><br> [[Bild:wiki_06.jpg|Wiki6]]<br><br> Im dann folgenden Dialog können noch einige weitere Dinge festgelegt werden. Wichtig zumindest ist die Zugriffsberechtigung. Wollt Ihr, dass nur Ihr die Texte editieren könnt, dann empfiehlt sich folgende Einstellung:<br><br> [[Bild:wiki_07.jpg|Wiki7]]<br><br> Prüft nach, ob die Einstellungen zu der E-Mail Adresse passen und aktiviert den Upload von Bildern, falls Ihr dies verwenden möchtet. Auch kann an der Stelle gleich ein anderes Logo festgelegt werden. Dies lässt sich aber im Nachgang auch noch ändern:<br><br> [[Bild:wiki_08.jpg|Wiki8]]<br><br> Jetzt sind die Vorbereitungen erledigt. Klickt dann nochmal auf '''Weiter''' um die Installation zu beginnen. Wenn Ihr folgendes Ergebnis seht, ist alles gut gelaufen:<br><br> [[Bild:wiki_09.jpg|Wiki9]]<br><br> Das war es. Es wird die LocalSettings.php heruntergeladen:<br><br> [[Bild:wiki_10.jpg|Wiki10]]<br><br> Diese muss dann wieder auf Euren Server hochgeladen werden und in das /var/www/mediawiki Verzeichnis kopiert werden. Ihr könnt das auch manuell machen: <code><pre>vi /var/www/mediawiki/LocalSettings.php</pre></code> Öffnet die heruntergeladene Datei mit einem Texteditor (unter Windows am besten mit dem [https://notepad-plus-plus.org/ notepad++]) und kopiert den Inhalt in vi. Mit der rechten Maustaste wird alles eingefügt. <br><br> ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' <br><br> Danach noch den Besitzer neu setzen: <code><pre>chown root:www-data /var/www/mediawiki/LocalSettings.php</pre></code> Jetzt können wir unsere Wiki aufrufen und uns anmelden:<br><br> [[Bild:wiki_11.jpg|Wiki11]]<br><br> ==Erste Schritte== ===Sidebar bearbeiten=== Um die Sidebar zu editieren und erweitern ruft folgende URL auf, sobald Ihr eingeloggt seid: <br><br> '''MEINE_URL/mediawiki/index.php?title=MediaWiki:Sidebar''' <br><br> Überpunkte werden mit einem '''*''' markiert, Unterpunkte mit '''**''' . Legt das Menü wie in folgenden Beispiel an: <code><pre> * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Downloads|Downloads ** Links|Links ** Impressum|Impressum * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates </pre></code><br><br> ===Style bearbeiten=== Um Änderungen am Style vorzunehmen, gebt folgende URL ein: <br><br> '''MEINE_URL/index.php?title=MediaWiki:Common.css''' <br><br> Hier können dann entsprechende Änderungen am CSS vorgenommen werden. Hier einige Beispiele: <code><pre> /* CODE Bereich geaendert */ code { color: black; background-color: #f9f9f9; border: 0px; border-radius: 0px; padding: 0px 0px; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #FFE7A3; line-height: 1.1em; font-size: 13px; } /* Farbe Inhaltsverzeichnis aendern */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #d0effb; padding: 5px; font-size: 95%; } /* Text .Inhaltsverzeichnis. an der Spitze des Inhaltsverzeichnisses nicht anzeigen */ #toctitle {display:none;} /* Blocksatz */ .ns-0 p { text-align:justify; }</pre></code> <br><br> ===Bilder einfügen=== Hier gleich ein Beispiel, wie man ein Bild auf der linken Seite einfügt (Text umfließt auf der rechten Seite): <code><pre><div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Das gleiche auf der rechten Seite (Text umfließt dann links): <code><pre><div style="float:right;text-align:center;padding-left:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div></pre></code> Ein Bild generell einfügen: <code><pre>[[Bild:dateiname.jpg|BILDNAME]]</pre></code> <br /><br /> ===Code Tag=== Der Code Tag lautet <code><pre> <code><pre>...< /pre>< /code> </pre></code> ''(Leerzeichen vor den '''/''' weglassen!!!)'' <br><br> ===Inhaltsverzeichnis einfügen=== Hierzu zu Begin eines Textes folgenden Code einfügen: <code><pre> <div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px"> __TOC__ </div><noinclude></pre></code> <br><br> ===Inhaltsverzeichnis unterdrücken=== Bei mehr als 3 Überschriften wird automatisch ein Inhaltsverzeichnis angelegt. Dieses kann mit dem Code <code><pre>__NOTOC__</pre></code> unterbunden werden. <br><br> ===Listfunktion=== Hier gibt es im Grunde folgende Möglichkeiten: <code><pre> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste * Eintrag 1 * Eintrag 2 * Eintrag 3 ** Eintrag 3.1 ** Eintrag 3.2 * Eintrag 4 <br><br> Um die Liste etwas einzurücken: <code><pre> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste :* Eintrag 1 :* Eintrag 2 :* Eintrag 3 :** Eintrag 3.1 :** Eintrag 3.2 :* Eintrag 4 <br><br> Numerische Variante: <code><pre> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 </pre></code> '''Ergibt:'''<br> Das ist eine Liste # Eintrag 1 # Eintrag 2 # Eintrag 3 ## Eintrag 3.1 ## Eintrag 3.2 # Eintrag 4 <br><br> ===Einen Link einfügen=== Einen Link setzt Ihr wie folgt: <code><pre>[http://Adresse/des/Links BEZEICHNUNG] [http://www.gargi.org Gargi's Homepage]</pre></code> Ergibt: [http://www.gargi.org Gargi's Homepage]<br><br> ==Mobile Frontend installieren== Das [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend] ist eine Erweiterung für die Mediawiki. Ist diese aktiviert bekommen Besucher mit einem mobilen Endgerät die Seite entsprechend angepasst angezeigt. Allerdings ist in der mobilen Ansicht keine Sidebar mit den Menüeinträgen vorhanden. Die Philosophie ist vielmehr die, dass der User beispielsweise über eine Suchmaschine auf den gesuchten Seiteninhalt stößt und dann eine angepasste Version der Seite angezeigt bekommt.<br> Um die Erweiterung zu installieren müsst Ihr in das Extensions Verzeichnis der Mediawiki wechseln: <code><pre>cd /var/www/mediawiki/extensions</pre></code> Ladet die Erweiterung herunter: <code><pre>wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_25-c193468.tar.gz</pre></code> ''Die aktuelle URL erhaltet Ihr hier: [https://www.mediawiki.org/wiki/Extension:MobileFrontend Mobile Frontend]'' <br><br> Packt das Paket aus: <code><pre>tar -xzf MobileFrontend-REL1_25-c193468.tar.gz</pre></code> Setzt nun den Benutzer richtig: <code><pre>chown -R /var/www/mediawiki/extensions/MobileFrontend</pre></code> Nun müssen wir nur noch dem Wiki die neue Erweiterung bekannt machen. Dazu editieren wir die '''LocalSettings.php''': <code><pre>nano /var/www/mediawiki/LocalSettings.php</pre></code> Fügt dort folgende Zeilen ein: <br><br> '''require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";'''<br> '''$wgMFAutodetectMobileView = true;''' <br><br> Das war es auch schon. Wenn Ihr nun mit einem Smartphone Eure Seite aufruft, sollte die Mediawiki jetzt etwas anders aussehen. <br><br> [[Bild:mobil.jpg|mobil]] <br><br> ==https einrichten (nebst htaccess Schutz)== Wenn wir noch eine Verbindung über https zulassen wollen, müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br><br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = '''zB Bayern'''<br> Locality Name, eg. City (Stadt): = '''zB Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer''' <br><br> Dann generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /mediawiki /var/www/mediawiki <Directory /var/www/mediawiki> Options FollowSymLinks AllowOverride All DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory> </VirtualHost></pre></code> EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: '''NameVirtualHost *:443''' Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt. <br><br> Wenn Ihr generell auf '''https''' umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre>a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Editiert die '''.htaccess''': <code><pre>nano /var/www/mediawiki/.htaccess</pre></code> Fügt direkt unter RewriteEngine on diese Zeilen ein: <code><pre>RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login der Owncloud bekommt. Wir blockieren das deshalb mit .htaccess und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes oben ein: <code><pre> AuthType Basic AuthName mediawiki AuthUserFile /var/www/mediawiki/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels cd dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==Mediawiki updaten== Bevor Ihr Euere Mediawiki updatet, sichert Eure Datenbank und macht am besten eine Kopie Eures mediawiki Verzeichnisses. Dann ladet einfach das aktuelle Installationspaket herunte, entpackt den Tarball und kopiert diesen über Eure Installation. Passt dann wie in dem Tutorial hier beschrieben die Zugriffsberechtigungen an. Danach wechselt auf der Konsole in das '''maintenance''' Verzeichnis und führt das Update aus: <code><pre>php update.php</pre></code> Nach dem Update prüft die Datenbank auf Fehler: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT Datenbankname</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT Datenbankname --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> ==Umzug oder Sicherung einer mySQL Datenbank== Sicherlich gibt es viele Hilfsmittel, um eine Datenbank von einem Server auf den anderen um zu ziehen. Wer aber Zugriff über eine Shell auf den Server hat, der kann das mit wenigen Schritten auch auf der Konsole erledigen. Um genau zu sein, drei Schritte. Dazu muss eine leere Datenbank auf dem Zielrechner angelegt sein (db_neu). ===Alte Datenbank (db_alt) auf alten Server dumpen/wegschreiben=== <code><pre>mysqldump --user=DB_USERNAME --password=PASSWORT db_alt > dump.sql</pre></code> (Username der ALTEN Datenbank!) <br><br> ===Dump von Server alt auf neu kopieren=== <code><pre>scp dump.sql IP_SERVER_NEU:/beliebiges/zielverzeichnis/</pre></code> <br> ===Datenbank auf neuen Server in neu DB übertragen=== <code><pre>mysql -p -uDB_USERNAME db_neu < /beliebiges/zielverzeichnis/dump.sql</pre></code> (Username der NEUEN Datenbank!) <br><br> Damit sind die Daten in der neuen Datenbank. Wie schnell das geht hängt von der Größe der DB ab und natürlich auch von der Geschwindigkeit der Rechner. <br><br> ===Datenbankpflege=== Nach der Übertragung der Datenbank sollte noch einwenig Datenbankpflege betrieben werden. Prüft erstmal, ob alles okay ist: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu</pre></code> Sollte es Fehler anzeigen, dann versucht diese mittels folgenden Befehl zu reparieren: <code><pre>mysqlcheck -hlocalhost -uDB_USER -pPASSWORT db_neu --auto-repair</pre></code> Danach sollte die Anwendung wieder sauber auf die Datenbank zugreifen können. <br><br> 9a152642af157ba6f960e29ffa2157e54aa55243 Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 893 778 2015-10-30T22:08:20Z Admin 1 /* Installation von Getmail und die Konfiguration */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essentials</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> c6c632cc1d5cea43229e5c44b35c0214186a2aac 894 893 2015-10-30T23:11:12Z Admin 1 /* Viren mit ClamAV herausfiltern */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -create razor-admin -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet daruf hin, dass die Kommunikation funktioniert. Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 97d706b730845507c80ea407880eefc121807cc4 895 894 2015-11-01T10:40:06Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy), funktioniert aber genauso auf Debian 8 (Jessie).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 3fd775b91f1774ab01b16468b5b1bfdda7fbfe68 896 895 2015-11-01T10:41:19Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> f6c633f21e1333dc97765462f976d5984ecde0b0 897 896 2015-11-01T15:26:54Z Admin 1 /* Spam tilgen mit Spamassassin */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 5cc53cf550143de2d15eb922be0074272fb4620a 898 897 2015-11-01T15:54:20Z Admin 1 /* Spamassassin prüfen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ==Scripterweiterungen== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> b7b612a100dbc1de5ac921ba206e9375e9dc7af0 899 898 2015-11-01T15:54:42Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ===Scripterweiterungen=== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> <metakeywords>IMAP,Linux,Mailserver,Debian,Spamassassin,E-Mail,Clamav</metakeywords> 80796595a1bd62f3a326b1e746eacd00d85aaf41 909 899 2017-01-11T00:19:25Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ===Scripterweiterungen=== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> ca5fec4f27dea25f0fb5364b7067560244de3b8e 918 909 2017-01-20T20:12:03Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet darauf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ===Scripterweiterungen=== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> <br> {{Frage|Bei Fragen zu diesem Tutorial verweise ich auf mein Forum zu diesem Beitrag unter [http://www.gargi.org/showthread.php?1387-Mailserver-auf-Debian-mit-Imap-Smarthost-und-Filter Mailserver auf Debian mit Imap, Smarthost und Filter]}} <br /><br /> bd61332e5d33d8f79626dded9f84fdb554690a6c Hauptseite 0 1 905 841 2017-01-10T23:17:18Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> [[Bild:logo.png]] __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> 3620741d74515a5b6c0428c07ceac07acadb73d1 907 905 2017-01-10T23:35:04Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ <metakeywords>Doom,Linux,openSUSE,compile,Debian,NSLU2,unslung,Tutorials,ioquak3,Firewall,iptables,Nagios</metakeywords> c6748b97c1c6840fe46272bdab074dec21032d95 908 907 2017-01-11T00:17:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ b741332c84b90bc8e8289aa782a3e78cc2dfa95d Datei:Logo.png 6 175 906 534 2017-01-10T23:18:40Z Admin 1 Admin lud eine neue Version von [[Datei:Logo.png]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 DOOM auf Linux 0 141 910 699 2017-01-11T00:21:14Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE 12.2''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Installation der gm.dls für die Midi Wiedergabe'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- SDL-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- gtk2-devel'''<br> '''- cmake''' <br> <br> ==FMOD installieren== Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX ( http://www.fmod.org/download-previous-products/ ) codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B. <code><pre>cd fmodapi44203linux64</pre></code> und installiert die API mittels <code><pre>sudo make install</pre></code> Die Bibliotheken werden hierbei in das Verzeichnis '''/usr/local/lib/''' hinterlegt, die Header dazu sind dann im Verzeichnis '''/usr/local/include/fmodex/''' zu finden. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> {{Hinweis|Patchvorgang für FMOD / Prologic}} <br> <br> Bitte ändert jetzt zuerst im Quellcode folgende Datei ab: <br> <br> '''...gzdoom/src/sound/fmodsound.ccp''' <br> <br> Sucht nach der Zeile (normal auf Zeile 201): <code><pre>{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },</pre></code> Ändert diesen wie folgt ab: <code><pre>{ "Prologic", FMOD_SPEAKERMODE_SRS5_1_MATRIX },</pre></code> Speichert die Änderung. Wechselt dann in das build Verzeichnis <code><pre>cd build</pre></code> Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an: <code><pre>cmake -DCMAKE_BUILD_TYPE=Release -DGLEW_LIBRARY=/usr/lib/libGLEW.so -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..</pre></code> Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_vid_multisample=0''' <br> <br> auf <br> <br> '''gl_vid_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für FMOD''' <code><pre># Specfile for FMOD # norootforbuild %define _minor 03 %define _ver2 4.42 Summary: FMOD is a cross platform audio library and toolset Name: libfmodex Version: 44203 Release: 1.0 License: see LICENSE.TXT Group: Development/Libraries/C and C++ Source: fmodapi44203linux64.tar.gz Url: http://www.fmod.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Distribution: openSUSE 12.2 Packager: YOUR NAME / URL> %description FMOD is a cross platform audio library and toolset to let you easily implement the latest audio technologies into your title. The FMOD Ex sound system is a revolutionary new audio engine for game developers, multimedia developers, sound designers, musicians and audio engineers, based on the years of experienced of Firelight Technologies(tm) previous product FMOD. It also aims high - to push the boundaries of audio implementation for games and the like while at the same time using minimal resources and being scalable. This new engine is written from the ground up since FMOD 3 was released and involves years of experience and feedback from FMOD users to create the most feature filled and easy to use product possible, without the rawbacks of legacy implementation that FMOD 3 may have suffered from its years of continuous development. Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009 %prep %setup %build %install mkdir -p $RPM_BUILD_ROOT/usr/local/lib mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h %files /usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so /usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so /usr/local/lib/include/fmodex/fmod_codec.h /usr/local/lib/include/fmodex/fmod_dsp.h /usr/local/lib/include/fmodex/fmod_errors.h /usr/local/lib/include/fmodex/fmod.h /usr/local/lib/include/fmodex/fmod.hpp /usr/local/lib/include/fmodex/fmodlinux.h /usr/local/lib/include/fmodex/fmod_memoryinfo.h /usr/local/lib/include/fmodex/fmod_output.h</pre></code> <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''FMOD:''' http://www.fmod.org<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 2981e6a631823fa6fbbdc6c067f7552df825b01c 919 910 2017-08-27T20:42:18Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir dei richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 2a25419470f811635b30b82ed4742d2c2da60c4b 920 919 2017-08-27T20:42:58Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir dei richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 8e585d4f4a33b65c381367143811dbc652e430f9 Overclocking 0 83 911 93 2017-01-12T17:45:21Z Admin 1 wikitext text/x-wiki ==Phönix aus der Asche ... oder mehr Power== '''HINWEIS/UPDATE: Neue Geräte werden bereits mit der 266MHz Taktung ausgeliefert. Hier ist dieser Schritt nicht mehr notwendig!''' Nachdem ich im Netz einwenig recherchiert habe, habe ich herausgefunden, dass man durch einen kleinen Overclocker-Trick die NSLU2 merklich beschleunigen kann. Verbaut wurde eine 133MHz Intel ARM-CPU (XScale), die allerdings komischerweise laut der machbaren Spezifikation im Grunde nur auf halben Coretakt läuft. Möglich und ausgelegt ist die CPU auf 266 MHz. Durch einen kleinen Eingriff in das Gerät, kann die Sperre aufgehoben werden. Dazu muss das Gerät geöffnet und ein kleiner Widerstand entfernt werden. '''Hinweis:''' Dadurch geht die Garantie verloren. Ebenso sind technische Defekte nicht auszuschließen, die eventuell auch Schäden anrichten können! Allerdings erhöht sich angeblich dadurch der Chip nicht merklich an Temperatur, bzw. die verbrauchte Leistung ist nicht wesentlich höher. Hier das geöffnete Gerät und lokalisierter Widerstand: [[Bild:slug18.jpg|center]] Man kann den Widerstand auslöten (dazu benötigt man feines Werkzeug) oder man schneidet ihn mit einen scharfen Messer vorsichtig durch: [[Bild:slug19.jpg|center]] Bitte testet das Gerät nochmal genau durch, ob alle Funktionen erhalten geblieben sind. Bei mir hat das soweit wunderbar funktioniert. Das muss aber nicht bedeuten, dass es überall so läuft! Also wie gesagt: Nur auf eigene Gefahr und die Garantie des Gerätes ist damit definitiv futsch! Um nun sicher zu gehen, dass die Slug auch mit 266MHz taktet, kann man sich die BogoMIPS anzeigen lassen. Das passt zwar nicht haargenau, aber zeigt, dass der Takt nun entsprechend angehoben ist: <code><pre>root@Hellboy:/>cat /proc/cpuinfo Processor : XScale-IXP425/IXC1100 rev 1 (v5b) BogoMIPS : 263.78 Features : swp half thumb fastmult edsp Hardware : Intel IXDP425 Development Platform Revision : 0000 Serial : 0000000000000000</pre></code> Das Datenblatt zum XScale-IXP425 kann bei Intel hier eingesehen werden [http://www.intel.com/design/network/manuals/252480.htm] Dort steht es als downloadbares pdf-Dokument offen zur Verfügung. [[Bild:testi.jpg|center]] 3abbad8769ac278f6391c1fdd5873b1b31c58f45 913 911 2017-01-12T17:46:16Z Admin 1 wikitext text/x-wiki ==Phönix aus der Asche ... oder mehr Power== '''HINWEIS/UPDATE: Neue Geräte werden bereits mit der 266MHz Taktung ausgeliefert. Hier ist dieser Schritt nicht mehr notwendig!''' Nachdem ich im Netz einwenig recherchiert habe, habe ich herausgefunden, dass man durch einen kleinen Overclocker-Trick die NSLU2 merklich beschleunigen kann. Verbaut wurde eine 133MHz Intel ARM-CPU (XScale), die allerdings komischerweise laut der machbaren Spezifikation im Grunde nur auf halben Coretakt läuft. Möglich und ausgelegt ist die CPU auf 266 MHz. Durch einen kleinen Eingriff in das Gerät, kann die Sperre aufgehoben werden. Dazu muss das Gerät geöffnet und ein kleiner Widerstand entfernt werden. '''Hinweis:''' Dadurch geht die Garantie verloren. Ebenso sind technische Defekte nicht auszuschließen, die eventuell auch Schäden anrichten können! Allerdings erhöht sich angeblich dadurch der Chip nicht merklich an Temperatur, bzw. die verbrauchte Leistung ist nicht wesentlich höher. Hier das geöffnete Gerät und lokalisierter Widerstand: [[Bild:slug18.jpg|center]] Man kann den Widerstand auslöten (dazu benötigt man feines Werkzeug) oder man schneidet ihn mit einen scharfen Messer vorsichtig durch: [[Bild:slug19.jpg|center]] Bitte testet das Gerät nochmal genau durch, ob alle Funktionen erhalten geblieben sind. Bei mir hat das soweit wunderbar funktioniert. Das muss aber nicht bedeuten, dass es überall so läuft! Also wie gesagt: Nur auf eigene Gefahr und die Garantie des Gerätes ist damit definitiv futsch! Um nun sicher zu gehen, dass die Slug auch mit 266MHz taktet, kann man sich die BogoMIPS anzeigen lassen. Das passt zwar nicht haargenau, aber zeigt, dass der Takt nun entsprechend angehoben ist: <code><pre>root@Hellboy:/>cat /proc/cpuinfo Processor : XScale-IXP425/IXC1100 rev 1 (v5b) BogoMIPS : 263.78 Features : swp half thumb fastmult edsp Hardware : Intel IXDP425 Development Platform Revision : 0000 Serial : 0000000000000000</pre></code> Das Datenblatt zum XScale-IXP425 kann bei Intel hier eingesehen werden [http://www.intel.com/design/network/manuals/252480.htm] Dort steht es als downloadbares pdf-Dokument offen zur Verfügung. 03337b6c974d394b8ed41afa032fdafe6b37d368 Datei:Testi.jpg 6 272 912 2017-01-12T17:45:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Debian 6 und 7 auf der NSLU2 0 222 914 693 2017-01-14T10:33:26Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 oder auch Debian 7 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sde2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="sda2..."</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> <metakeywords>Debian,Installieren,Konfigurieren,Linux,NSLU2,Debian 6</metakeywords> af3182447acb5701911f176d17192d7b39d19855 Ioquake3 Server und Build Service 0 105 915 855 2017-01-15T23:43:01Z Admin 1 /* Crosscompile Windows 64 bit Version unter openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-dev openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Hier der Hinweis, dass Ihr den '''Port 9418''' (TCP_OUT) freischalten müsst, solltet Ihr eine Firewall am Laufen haben. <br><br> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE 12.3''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_12.3/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libSDL2'''<br> '''mingw64-libcurl4'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 82af73656477ebcd2cf0cdc15f72c0d6e54d7622 916 915 2017-01-15T23:44:43Z Admin 1 /* Crosscompile Windows 64 bit Version unter openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-dev openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Hier der Hinweis, dass Ihr den '''Port 9418''' (TCP_OUT) freischalten müsst, solltet Ihr eine Firewall am Laufen haben. <br><br> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE 12.3''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_12.3/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE leap 42.2''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_42.2/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libSDL2'''<br> '''mingw64-libcurl4'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> 26c037f6bf9c9aead0f7443d81442c0106621649 917 916 2017-01-15T23:45:25Z Admin 1 /* Crosscompiler auf openSUSE */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-dev openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Hier der Hinweis, dass Ihr den '''Port 9418''' (TCP_OUT) freischalten müsst, solltet Ihr eine Firewall am Laufen haben. <br><br> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE leap 42.2''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_42.2/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE leap 42.2''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_42.2/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libSDL2'''<br> '''mingw64-libcurl4'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br> Pierre "Gargi" Kretschmer <metakeywords>Quake,Quake 3,Server,Arena,Linux,Kompilieren,build,ioquake,ioquake3</metakeywords> add9a4b803a946f9abfa288f17da15dc318eb1f6 DOOM auf Linux 0 141 921 920 2017-08-27T20:43:20Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir die richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''liboutput_sdl.so'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> ed6545d772cc99fa9172ece3dd3fef0f9c892060 922 921 2017-08-27T20:43:51Z Admin 1 /* gzdoom Quellcode herunterladen und übersetzen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir die richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf '''Timidity''' um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und sucht die Zeile '''set_midipatchset''' und gebt dort den Pfad zu Eurer dls an: <br> <br> <code><pre>set_midipatchset=/usr/share/sounds/gm.dls</pre></code> <br> <br> Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> e747f89f960a39496238b0804c720a97855550db 923 922 2017-08-27T20:46:49Z Admin 1 /* Starten und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir die richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Weitere Einstellungen, die Ihr eventuell nicht über die Menüs im Spiel vornehmen könnt finden sich in der gzdoom.ini im versteckten gzdoom Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die zdoom.ini und könnt hier noch Finetuning betreiben. Änderungen speichert entsprechend ab und probiert sie dann aus. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 4a910687134b4d419de9a06009bc892362baa317 924 923 2017-08-27T20:47:23Z Admin 1 /* Starten und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir die richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Weitere Einstellungen, die Ihr eventuell nicht über die Menüs im Spiel vornehmen könnt finden sich in der '''gzdoom.ini''' im versteckten gzdoom Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die ''gzdoom.ini'' und könnt hier noch Finetuning betreiben. Änderungen speichert entsprechend ab und probiert sie dann aus. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an ('''32bit''' oder '''64bit'''). <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: gargibuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 12.2 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ .. make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/liboutput_sdl.so /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 43d4471b3b0e56422b6f0337f334d2d8bde4020a 925 924 2017-08-28T16:00:47Z Admin 1 /* SPEC Files */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir die richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Weitere Einstellungen, die Ihr eventuell nicht über die Menüs im Spiel vornehmen könnt finden sich in der '''gzdoom.ini''' im versteckten gzdoom Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die ''gzdoom.ini'' und könnt hier noch Finetuning betreiben. Änderungen speichert entsprechend ab und probiert sie dann aus. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch ein (vereinfachtes) Spec File, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Verzeichnisse an. <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: mybuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 42.3 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build export CC=/usr/bin/gcc-5 export CXX=/usr/bin/g++-5 cmake .. -DCMAKE_BUILD_TYPE=Release make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/licenses mkdir -p $RPM_BUILD_ROOT/usr/bin cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/gzdoom.sf2 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.sf2 cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp -R docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/gzdoom.sf2 /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> <br> {{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}} <br /><br /> 86a57b2570b4cd77842bd734074cf86fd9ed1c57 969 925 2018-06-03T13:25:03Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:doom.jpg|logo]] <br /> ''Doom is not a game, it's sports...''</div> '''Prolog'''<br> <br> Nachdem '''Doom''' im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE Leap 42.3 (64bit) an. <br> <br> Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden. <br> <br> Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das '''prboom''' (http://prboom.sourceforge.net), '''jdoom / Doomsday''' (http://dengine.net) und '''gzdoom''' (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren. <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:E1M1.jpg|E1M1]] <br /> ''E1M1 im Leveleditor "DOOM BUILDER"''</div> Um den '''DOOM''' Port gzdoom unter '''openSUSE Leap 42.3''' (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte: <br> <br> '''- Vorbereitung des Systems'''<br> '''- Aktuellen Quellcode über den git Clone ziehen'''<br> '''- Compile der gzdoom Binaries'''<br> '''- Konfiguration der doom.ini und Installation der doom.wad''' <br> <br> An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte '''wad - Datei''', die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden. <br> <br> Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die '''gm.dls'''. Diese findet Ihr bei einem installierten Windows im Verzeichnis '''/system32/drivers/'''. Kopiert diese Datei z.B. unter Linux nach '''/usr/share/sounds/'''. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein. <br> <br> Ich erkläre das am Beispiel eines installieren openSUSE Leap 42.3 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar. <br> <br> ==Voraussetzung== Folgende Pakete müssen installiert sein (via '''Yast''' oder '''zypper'''): <br> <br> '''- make'''<br> '''- gcc-c++'''<br> '''- zlib-devel'''<br> '''- libSDL-devel'''<br> '''- libSDL2-devel'''<br> '''- libjpeg-devel'''<br> '''- libbz2-devel'''<br> '''- fluidsynth-devel'''<br> '''- glew'''<br> '''- glew-devel'''<br> '''- nasm'''<br> '''- git'''<br> '''- tar'''<br> '''- libgme-devel'''<br> '''- openal-soft-devel'''<br> '''- mpg123-devel'''<br> '''- libsndfile-devel'''<br> '''- timidity'''<br> '''- Mesa-libGL-devel'''<br> '''- gtk3-devel'''<br> '''- cmake''' <br> Der Compile benötigt mindestens die gcc compiler ab der Version '''4.9'''. OpenSUSE 42.3 stellt selbst die Version 4.8 zur Verfügung. Installiert über YAST deshalb noch das Paket '''gcc5'''. <br> <br> ==gzdoom Quellcode herunterladen und übersetzen== Den Quellcode ziehen wir mittels git in unserem Arbeitsverzeichnis: <code><pre>git clone git://github.com/coelckers/gzdoom gzdoom</pre></code> Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom <code><pre>cd gzdoom</pre></code> und legen ein build-Verzeichnis an: <code><pre>mkdir build</pre></code> <br> Wir bereiten nun den Compile vor. Wechselt dazu in das build Verzeichnis: <code><pre>cd build</pre></code> Danach legen wir die richtige Compilerversion fest: <code><pre>export CC=/usr/bin/gcc-5</pre></code> <code><pre>export CXX=/usr/bin/g++-5</pre></code> Der nächste Befehl sollte fehlerfrei durchlaufen: <code><pre>cmake .. -DCMAKE_BUILD_TYPE=Release</pre></code> Nun können wir den Compile starten: <code><pre>make</pre></code> Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind: <br> <br> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:doom1.jpg|Discs]] <br /> ''Rare item. The original discs''</div> '''brightmaps.pk3'''<br> '''gzdoom'''<br> '''gzdoom.pk3'''<br> '''lights.pk3''' <br> <br> Dazu kopiert die '''doom.wad''' von Eurer Doom CD. <br> <br> ==Starten und konfigurieren== Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Weitere Einstellungen, die Ihr eventuell nicht über die Menüs im Spiel vornehmen könnt finden sich in der '''gzdoom.ini''' im versteckten gzdoom Verzeichnis in Eurem Homeverzeichnis <br> <br> '''~/.config/gzdoom''' <br> <br> Dort öffnet die ''gzdoom.ini'' und könnt hier noch Finetuning betreiben. Änderungen speichert entsprechend ab und probiert sie dann aus. <br> <br> ==Grafikoptionen== Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern: <br> <br> [[Bild:doom_fullhd_kl.jpg|FULL HD]] <br> <br> Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg <br> <br> Die Settings hierfür als Screenshots: <br> <br> [[Bild:settings1.jpg|Settings 1]] <br> <br> [[Bild:settings2.jpg|Settings 2]] <br> <br> [[Bild:settings3.jpg|Settings 3]] <br> <br> [[Bild:settings4.jpg|Settings 4]] <br> <br> Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus: <code><pre>#!/bin/sh cd /home/hans/bin/gzdoom nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0 gzdoom nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0</pre></code> Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden. <br> <br> Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert <br> <br> '''gl_multisample=0''' <br> <br> auf <br> <br> '''gl_multisample=8''' <br> <br> für 8x setzen. <br> Der Unterschied ist dann auch entsprechend gut zu erkennen: <br> <br> [[Bild:gzdoom_multisample.jpg|Multisample]] <br> <br> ==Stuttering Problem bei aktivierten Compositing Effekten== Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination '''SHIFT+STRG+F12''' abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen. <br> <br> Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die '''Systemeinstellungen'''. Dort klickt auf '''Arbeitsflächen-Effekte''': <br> <br> [[Bild:compositing1.png|Compositing 1]] <br> <br> Im Registerblatt '''Erweitert''' klickt dann "'''Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen'''" an: <br> <br> [[Bild:compositing2.png|Compositing 2]] <br> <br> Mit '''Anwenden''' übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten. <br> <br> ==SPEC Files== Hier noch ein (vereinfachtes) Spec File, solltet Ihr lieber '''RPM''' Pakete für openSUSE erstellen wollen, die Ihr dann via '''YAST''' beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Verzeichnisse an. <br> <br> '''Specfile für gzdoom''' <code><pre>#Specfile fuer GZDOOM Summary: Shooter aus den gzdoom Quellen Name: gzdoom Version: 1455 Release: mybuild License: see BUILDLIC.TXT Group: Games/Action Source: gzdoom-1455.tar.gz URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html Distribution: openSUSE 42.3 Packager: YOUR NAME /URL> %description Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin die Originaldateien der originalen Installations CD benötigt. %prep %setup %build mkdir build cd build export CC=/usr/bin/gcc-5 export CXX=/usr/bin/g++-5 cmake .. -DCMAKE_BUILD_TYPE=Release make %install mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/licenses mkdir -p $RPM_BUILD_ROOT/usr/bin cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3 cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3 cp build/gzdoom.sf2 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.sf2 cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3 cp -R docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/ %files /usr/local/games/gzdoom/brightmaps.pk3 /usr/local/games/gzdoom/gzdoom /usr/local/games/gzdoom/gzdoom.pk3 /usr/local/games/gzdoom/gzdoom.sf2 /usr/local/games/gzdoom/lights.pk3 /usr/local/games/gzdoom/docs/*</pre></code> Über diese RPM wird dann gzdoom nach '''/user/local/games/gzdoom''' installiert. <br> <br> ==Links== '''Projektseite gzdoom:''' http://www.osnanet.de/c.oelckers/gzdoom/index.html<br> '''id Software:''' http://www.idsoftware.com/<br> '''zdoom Forum:''' http://www.forum.zdoom.org/<br> '''Timidity:''' http://timidity.sourceforge.net/<br> '''openSUSE:''' http://www.opensuse.org<br> '''gzdoom auf Windows compilieren:''' http://zdoom.org/wiki/Compile_ZDoom_on_Windows<br> '''weiteres Tutorial für Windows:''' http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom<br> '''Forenbeitrag zum Thema auf Gargi.org:''' http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2<br> '''Forenbeitrag zum Thema auf openSUSE:''' http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html <br> <br> {{Hinweis|Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.}} <br> <br> Have fun! <br> <br> Pierre "Gargi" Kretschmer <br> 61a5d8c62cc8e543e771b89a203d2e1c055e5506 Impressum 0 5 926 357 2018-05-19T17:41:48Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' 6a1c84fea659a3516cb25fac668d4d45efd36888 927 926 2018-05-19T17:48:38Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: examples of types of cookies [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] fe14ad0e9f125ebd87a0828f0ea1f67a9108687f 928 927 2018-05-19T17:50:07Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte.Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. 4b4e135c607d9ae2b1fde48918743f3e149d30dd 929 928 2018-05-19T17:53:23Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte.Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''Analysedienste:''' Myslug.de verwendet innerhalb des WordPress Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. 50694831f8b39272a7e6e4378ecf1ade04a95049 930 929 2018-05-19T17:56:56Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. '''Namentlich gekennzeichnete Artikel und Kommentare unterliegen der alleinigen Verantwortung des Verfassers und geben nicht die Meinung des Seiteninhabers wieder.''' Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte.Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''Analysedienste:''' Myslug.de verwendet innerhalb des WordPress Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 99f7d21bfdc73cfe0ace442ff967bc0497e4809d 931 930 2018-05-19T17:58:01Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte.Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''Analysedienste:''' Myslug.de verwendet innerhalb des WordPress Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. b741271f66257cbf8280823e8d22088be56ec884 939 931 2018-05-23T23:49:40Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''9. Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''10. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 972e3a4d1ae9bf9081765e843699b1e71aeada50 943 939 2018-05-24T19:35:23Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] '''Wichtige Hinweise:''' '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden '''Hinweise zum Datenschutz''' '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. ede094017e1a3a27fb893a4d5494004983a5d243 944 943 2018-05-24T19:36:37Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. c2243e6f027242eab19951c6d175018edaeaf336 945 944 2018-05-25T04:20:18Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 29573553de1b9781ab932b77e1ef961a946f0909 947 945 2018-05-29T06:04:01Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt und ist ein programminternes Feature. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. a1cb6d2292056cf878c95d8e5930e53729ada543 948 947 2018-05-29T06:04:34Z Admin 1 /* Datenschutz */ wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt und ist ein programminternes Feature. '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 241539e0944bd56cff2d786af6d989cd6f458780 949 948 2018-05-29T06:05:59Z Admin 1 wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt und ist ein programminternes Feature. '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. c720ba9ca4efe5842622e8b759a9051d35b03bbb 950 949 2018-05-29T18:36:38Z Admin 1 /* Datenschutz */ wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 883e5d7677b86a772f4b25816d2691700ebce594 951 950 2018-05-29T18:37:03Z Admin 1 /* Wichtige Hinweise */ wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 3bf172c43856b7cec7ed5831840033b5f175f521 952 951 2018-05-29T18:37:18Z Admin 1 /* Datenschutz */ wikitext text/x-wiki [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] <br> In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 73d65a1aae0119e8e8ebfdbcfb9d55dd281556e2 MediaWiki:Sidebar 8 3 932 867 2018-05-19T18:01:06Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** http://www.gargi.org/forum.php|Forum ** Impressum|Impressum und Datenschutz * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES 3c7d2f1998192675391cb7355712fee268f42935 941 932 2018-05-24T19:32:47Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org/forum.php|Gargi.org ** Impressum|Impressum und Datenschutz * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES f45c48cac39cf077efa774468910844bcd469257 942 941 2018-05-24T19:33:07Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org|Gargi.org ** Impressum|Impressum und Datenschutz * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES 728cd3698ffe5f7d75341d9b040da2ca286165d3 Hauptseite 0 1 933 908 2018-05-20T18:36:59Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] [[Bild:logo.png]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 660949d381f5520a7f8a3a5ebe183d1bb629ac77 934 933 2018-05-20T18:37:28Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] [[Bild:logo2.png]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 3822d70ec5ecc0e6750d059cda61053a68af2947 935 934 2018-05-20T18:38:36Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] [[Bild:redc.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ 604756d30038016c42a20978d88db5b58df416c0 938 935 2018-05-20T18:40:04Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> {{Frage|Für Fragen haben wir ein eigenes Forum unter folgender URL zur Verfügung gestellt: http://www.gargi.org/forum.php. Für die Teilnahme am Forum ist eine kostenlose Registrierung notwendig.}} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :ehrenamtlicher Mitarbeiter bei Provider :ehrenamtlicher Administrator bei einem großen Filmforum :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ b741332c84b90bc8e8289aa782a3e78cc2dfa95d 940 938 2018-05-24T19:32:00Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> __NOTOC__ __NOEDITSECTION__ a3bd28d0d4ec66ece38e6f743fce2465a2a26422 953 940 2018-05-31T17:20:38Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 82356d88c353e2c2d0d230db6ccf8bdb89d8dcb3 955 953 2018-05-31T17:21:17Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div></div> [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ a8d94158b68ba16ae31af4f2de3a54ed6f6964c7 956 955 2018-05-31T17:24:12Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> </div> [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 12095e2bfb76deb34e7a97b5afcd6b38dbb16aa6 957 956 2018-05-31T17:25:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> | style="padding:0em 0.5em 0em 0.5em;" | | style="width:45%; vertical-align:top; border:1px solid #004A7F; background-color: #d0effb;" | <div style="border-bottom:1px solid #004A7F; background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Kurzübersicht</div> <div style="padding:0.4em 1em 0.3em 1em;"> ;Neue Tutorials :[[Raspbian auf dem Raspberry Pi 2 installieren]] :[[Mediawiki installieren und nutzen]] :[[Owncloud installieren]] :[[Mailserver auf Debian mit Imap, Smarthost und Filter]] grundlegend aktualisiert! :[[Ioquake3 Server und Build Service]] (auf github aktualisiert!) :[[Nagios installieren und konfigurieren]] :[[Debian 6 auf der NSLU2]] :[[DOOM auf Linux]] ;Häufig gelesene Tutorials :NSLU2 - [[Slug als Webserver]] :NSLU2 - [[Firefly mp3 Server]] :NSLU2 - [[Firewalling]] :NSLU2 - [[Backupmaschine]] :NSLU2 - [[Debian auf der NSLU2]] :Homeserver - [[Debian Kernel kompilieren]] :[[Ioquake3 Server und Build Service]] </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 4ed767298bbfe8110f9ebb9b665d67934e6324a9 Datei:Redc.jpg 6 273 936 2018-05-20T18:38:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 937 936 2018-05-20T18:39:39Z Admin 1 Admin lud eine neue Version von [[Datei:Redc.jpg]] hoch wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Ioquake3 Server und Build Service 0 105 946 917 2018-05-25T20:15:33Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert.<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Dedicated Server auf Linux== Ich verwende hierfür ein Debian Linux Squeeze (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein: <code><pre>apt-get install build-essential git</pre></code> Installiert zudem noch folgende Pakete: <code><pre>apt-get install screen libcurl4-dev openssl-dev libsdl1.2-dev libopenal-dev</pre></code> Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechselt in das '''quake3''' Verzeichnis: <code><pre>cd quake3</pre></code> Kompiliert nun das Game: <code><pre>make USE_LOCAL_HEADERS=0</pre></code> Multicore CPU Besitzer starten den Vorgang mit einem <code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code> Danach installiert alles mit einem <code><pre>make copyfiles</pre></code> Die Installationsdateien landen somit erstmal alle in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.x86_64 /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an: <code><pre>adduser gameserver</pre></code> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code><br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem /baseq3 Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User gameserver ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem /baseq3 Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> ==Windows Client via mingw Crosscompiler== Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny. <br><br> Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach: <code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essential git</pre></code> Das zieht noch einige Pakete nach. <br><br> Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen: <code><pre>apt-get install gcc-mingw32 mingw32-runtime mingw32-binutils</pre></code> Das war's dann auch schonmal für's erste an neuen Dateien. <br><br> Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin: <code><pre>mkdir work cd work</pre></code> Nun holen wir uns den aktuellen Quellcode: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Hier der Hinweis, dass Ihr den '''Port 9418''' (TCP_OUT) freischalten müsst, solltet Ihr eine Firewall am Laufen haben. <br><br> Danach in das Quellverzeichnis wechseln: <code><pre>cd quake3</pre></code> Und nun können wir schon mit dem Compile beginnen: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis: <br><br> '''/work/quake3/build/release-mingw32-x86''' <br><br> Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis: <br><br> '''---Q3A'''<br> -ioq3ded.x86.exe<br> -ioquake3.x86.exe<br> -renderer_opengl1_x86.dll<br> '''---baseq3'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> '''---missionpack'''<br> -cgamex86.dll<br> -qagamex86.dll<br> -uix86.dll<br> <br> Das alleine genügt natürlich noch nicht zum Spielen.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:gaunt_kulli.jpg|Gauntlet]] <br /> ''Gauntlet mit Kulli gezeichnet''</div> In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt. <br><br> Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3] <br><br> Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data] <br><br> Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis. <br><br> Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads] In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden. <br><br> Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer] Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien). <br><br> Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden. <br><br> Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270 Windowsmaschine: intel C2D 8400, Windows Vista 64bit. <br><br> Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output: <code><pre>4073 files in pk3 files execing default.cfg execing q3config.cfg couldn't exec autoexec.cfg Hunk_Clear: reset the hunk ok ----- Client Initialization ----- Couldn't read q3history. ----- Initializing Renderer ---- ------------------------------- QKEY found. ----- Client Initialization Complete ----- ----- R_Init ----- SDL using driver "directx" Initializing OpenGL display Estimated display aspect: 1.250 ...setting mode 8: 1280 1024 Using 8/8/8 Color bits, 24 depth, 0 stencil display. Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800 1280x768 848x480 1280x720' GL_RENDERER: GeForce 8800 GT/PCI/SSE2 Initializing OpenGL extensions ...ignoring GL_EXT_texture_compression_s3tc ...ignoring GL_S3_s3tc ...using GL_EXT_texture_env_add ...using GL_ARB_multitexture ...using GL_EXT_compiled_vertex_array ...ignoring GL_EXT_texture_filter_anisotropic GL_VENDOR: NVIDIA Corporation GL_RENDERER: GeForce 8800 GT/PCI/SSE2 GL_VERSION: 3.0.0 GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object [...] GL_MAX_TEXTURE_SIZE: 8192 GL_MAX_TEXTURE_UNITS_ARB: 4 PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits) MODE: 8, 1280 x 1024 fullscreen hz:N/A GAMMA: hardware w/ 0 overbright bits rendering primitives: single glDrawElements texturemode: GL_LINEAR_MIPMAP_LINEAR picmip: 0 texture bits: 0 multitexture: enabled compiled vertex arrays: enabled texenv add: enabled compressed textures: disabled Initializing Shaders ----- finished R_Init ----- ------ Initializing Sound ------ Loading "OpenAL32.dll"... Allocated 96 sources. OpenAL default capture device is 'Mikrofon (USB Audio)' OpenAL capture device opened. OpenAL info: Vendor: Creative Labs Inc. Version: 1.1 Renderer: Software AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX Device: ******* Software Available Devices: SB Audigy 4 [D000] ******* Software Sound initialization successful. -------------------------------- Loading vm file vm/ui.qvm... VM file ui compiled to 594408 bytes of code ui loaded in 1368576 bytes on the hunk 35 arenas parsed 32 bots parsed</pre></code> <br><br> ==Crosscompiler auf openSUSE== <div style="float:right;padding-left:20px"> [[Bild:toolchain1.png|YAST]] </div> Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE (in unserem Beispiel ein '''openSUSE leap 42.2''' 64bit) für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist. <br><br> Das Repository findet Ihr unter folgender Adresse: <br><br> '''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br> <br> '''VERZEICHNIS:''' repositories/windows:/mingw:/win32/openSUSE_42.2/<br> <br> Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert. <br><br> Danach könnt Ihr über YAST folgende Pakete installieren: <br><br> * mingw32-binutils<br> * mingw32-gcc<br> * mingw32-cross-binutils<br> * mingw32-cross-gcc<br> <br> Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an: <code><pre>mkdir work</pre></code> Dort laden wir uns die aktuellen Quellen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Verzeichnis quake3: <code><pre> cd quake3</pre></code> Dort stoßen wir dann den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86</pre></code> Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren. <br><br> ==Crosscompile Windows 64 bit Version unter openSUSE== Basis hierfür ist ein '''openSUSE leap 42.2''' in einer '''64bit Version'''. <br><br> Als erstes installieren wir dafür einen 64bit Crosscompiler. Dazu legen wir eine neue Installationsquelle via '''YAST''' an. Bei den Software Repositories legt ein neues '''Repository''' an, indem Ihr folgende URL (als http Variante) angebt: <code><pre>http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_42.2/</pre></code> Die Änderung speichert dann ab. Jetzt geht Ihr auf Software installieren und installiert folgende Pakete: <br><br> '''mingw64-cross-binutils'''<br> '''mingw64-cross-gcc'''<br> '''mingw64-headers'''<br> '''mingw64-libSDL'''<br> '''mingw64-libSDL2'''<br> '''mingw64-libcurl4'''<br> '''mingw64-openal-soft''' <br><br> Das zieht Euch noch einige Pakete nach. <br><br> Legt Euch nun irgendwo ein neues Verzeichnis an, in dem Ihr Eure fertigen Dateien später kopiert, z.B. '''ioquake3'''. Darunter legt zwei weitere Verzeichnisse an: '''baseq3''' und '''missionpack'''.<br> Kopiert danach zunächst folgende dlls nach Euer '''ioquake3''' Verzeichnis: <br><br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libcurl-4.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/OpenAL32.dll'''<br> '''/usr/x86_64-w64-mingw32/sys-root/mingw/bin/SDL.dll''' <br><br> Die letztere '''SDL.dll''' benennt in '''SDL64.dll''' um. <br><br> Danach wechselt in ein beliebiges Arbeitsverzeichnis auf der Konsole und zieht Euch die ioquake3 sourcen herunter: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Wechselt in das neue Verzeichnis '''quake3''': <code><pre>cd quake3</pre></code> Dann stoßt den Kompile an: <code><pre>make PLATFORM=mingw32 ARCH=x86_64</pre></code> Dieser sollte dann sauber durchlaufen. Wenn alles okay ist, dann liegen Eure neuen Daten unter '''/quake3/build/release-mingw32-x64'''. <br><br> Aus dem dortigen Verzeichnis kopiert folgende Dateien in Euer ioquake3 Verzeichnis: <br><br> '''ioq3ded.x86_64.exe'''<br> '''ioquake3.x86_64.exe'''<br> '''renderer_opengl1_x86_64.dll'''<br> '''renderer_opengl2_x86_64.dll''' <br><br> Aus dem '''baseq3''' Verzeichnis dann in das '''ioquake3/baseq3''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Aus dem '''missionpack''' Verzeichnis dann in das '''ioquake3/missionpack''' Verzeichnis: <br><br> '''cgamex64.dll'''<br> '''qagamex64.dll'''<br> '''uix64.dll''' <br><br> Das war es im Grunde auch. Ihr benötigt dann natürlich noch die '''pak0.pak''' Datei von Eurer Original Quake 3 CD. Dazu die PAK Patches, die Ihr unter anderem hier http://ioquake3.org/get-it/ findet. Unter Windows kopiert dann alles entsprechend zusammen und startet das Spiel mit '''ioquake3.x86_64.exe'''. <br><br> ==Q3mon installieren== Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden: <code><pre>apt-get install libapache2-mod-perl2</pre></code> Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen. <br><br> Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen: [http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/] Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt. <br><br> Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755: <code><pre>chmod -R 755 q3mon</pre></code> Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter: <br><br> [http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br> <br> Das tar.gz wird dann mit einem <code><pre>tar zvxf *.tar.gz </pre></code> in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor: <code><pre>./configure</pre></code> Danach werden die Quellen übersetzt: <code><pre>make </pre></code> und installiert: <code><pre>make install</pre></code> Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br> Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein: <code><pre> Alias /q3mon/EUER_PFAD/q3mon <Directory /EUER_PFAD/q3mon> Options ExecCGI Indexes FollowSymLinks MultiViews AddHandler cgi-script .cgi .pl AllowOverride None DirectoryIndex index.php index.htm index.html Order allow,deny allow from all </Directory></pre></code> Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt: <code><pre>/etc/init.d/apache2 restart</pre></code> Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br> Jetzt könnt Ihr schonmal nach den Quakeservern suchen. <br><br> ==Einfaches Buildservice Script== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:map.png|map]] </div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse. <br> Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen. <br><br> '''Folgendes muss eingerichtet sein und funktionieren:''' * Der Windows Client muss sich kompilieren lassen <br> * Der dedicated Server muss sich kompilieren lassen <br> * Der dedicated Server läuft auf der Maschine <br> * Der Exim oder ein entsprechender MTA sollte laufen <br> * Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br> * Screen muss installiert sein<br> * Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden: <code><pre>iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT</pre></code> Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar: <code><pre>chmod +x /usr/local/bin/ioq3build</pre></code> Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird: <code><pre>mkdir /work</pre></code> Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt): <br><br> -ioq3files (Verzeichnis)<br> --openAL.dll<br> --SDL.dll<br> --Copying.txt<br> --CopyingXYZ.txt<br> --baseq3 (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> ...<br> --- pak8.pk3<br> --missionpack (Verzeichnis)<br> --- pak1.pk3<br> --- pak2.pk3<br> --- pak3.pk3<br> <br> Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau erst einmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen. <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d)</pre></code> Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden: <br><br> '''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden. <br><br> '''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann. <br><br> '''fileuser:''' Der Nutzername, unter dem der ftp läuft. <br><br> '''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch. <br><br> '''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist. <br><br> '''madeat:''' Das wird später unser Zeitstempel für die gepackten Dateien. <code><pre> #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else </pre></code> Hier wird erstmal überprüft, ob der git Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter: <code><pre> #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 </pre></code> Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem git Hub ab und speichern den output in einer Datei "version.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss: <code><pre> #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt </pre></code> Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. <code><pre> #checkout if something is to be done ver_neu=$(cat version.txt) ver_alt=$(cat version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt cd /work </pre></code> Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen: <code><pre> #build new linux version cd /work/quake3 make -j3 </pre></code> Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5. <code><pre> pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' </pre></code> Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heißt diese death.cfg. <code><pre> #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz </pre></code> Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben. <code><pre> #build windows client cd /work/quake3 make clean make PLATFORM=wingw32 ARCH=x86 </pre></code> Hier wird der Windowsclient über den Crosscompiler gebaut. <code><pre> mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ </pre></code> Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert. <code><pre> #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp </pre></code> Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt. <code><pre> #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert. <br><br> Hier nocheinmal das Script an einem Stück: <code><pre>#!/bin/bash quakeuser=blah files=/home/blah/files fileuser=blah buildfiles=/home/blah/q3abuildfiles mailadresse=blah madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm /work/version_alt.txt mv /work/version.txt /work/version_alt.txt #get latest files cd /work rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd /work/quake3 git show | grep -m 1 commit | cut -b 8-14 > /work/version.txt #check if something is to be done ver_neu=$(cat /work/version.txt) ver_alt=$(cat /work/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu unverändert" > /work/unveraendert.txt exit 1 else rm /work/aktuell.txt rm /work/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt #build new linux version make -j3 pkill -u $quakeuser rm -R /usr/local/games/quake3 #quake install make copyfiles #built date reminder rm /work/built.txt date +%d.%m.%Y > /work/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #build windows client 32bit cd /work/quake3 make clean make PLATFORM=mingw32 ARCH=x86 mkdir /work/temp mkdir /work/temp/ioquake3_$ver_neu mkdir /work/temp/ioquake3_$ver_neu/missionpack mkdir /work/temp/ioquake3_$ver_neu/baseq3 cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/*.dll /work/temp/ioquake3_$ver_neu/ cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/ cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/ cp $buildfiles/* /work/temp/ioquake3_$ver_neu/ cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/ cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/ #pack and upload client version cd /work/temp/ zip -r ioq3_git-$ver_neu.$madeat.zip ioquake3_$ver_neu cp ioq3_git-$ver_neu.$madeat.zip /$files/ chown $fileuser:$fileuser /$files/ioq3_git-$ver_neu.$madeat.zip #remove temporary files cd /work rm -R /work/temp #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! Get revision git-$ver_neu from your ftp. Server is up and running!" //Zeilenumbruch > /var/log/quakeready.log mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch $mailadresse < /var/log/quakeready.log fi fi</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein. <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.mingw.org mingw Crosscompiler Projekt]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br> [http://sourceforge.net/projects/qstat/ Qstat Projekt]<br> [http://www.debian.org Debian Linux]<br> [http://www.opensuse.org openSUSE Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> Pierre "Gargi" Kretschmer 2122bd4e347fdfcba2fa64b9d80febc9f6856273 Datei:Garg banner.jpg 6 274 954 2018-05-31T17:20:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Vorlage:Hinweis 10 126 958 237 2018-06-03T13:19:58Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:Emblem-important.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> a4828bcea2387cd06b46cdcb16936c0973d86ceb 960 958 2018-06-03T13:20:25Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:43px;"|[[Bild:Emblem-important.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 69093ee3148f299bd5f47c8ffaca3b9ef2e1ded9 961 960 2018-06-03T13:21:12Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:20px;"|[[Bild:Emblem-important.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> c9de75b236abb2bb1674e627406e3c659ff7388b 962 961 2018-06-03T13:21:31Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:46px;"|[[Bild:Emblem-important.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> cec06bbf4cf3e23e46b028452bf5c24fb7b36e85 963 962 2018-06-03T13:21:37Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:48px;"|[[Bild:Emblem-important.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> c3a8bd486ab5eba7e5883a756051beec5a4577a3 964 963 2018-06-03T13:21:45Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:49px;"|[[Bild:Emblem-important.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> e3c5c7447292f884685411b17637229cdf3a0e0b Datei:Emblem-important.png 6 275 959 2018-06-03T13:20:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 965 959 2018-06-03T13:22:05Z Admin 1 wikitext text/x-wiki ==Permission== This work has been released into the '''[https://en.wikipedia.org/wiki/Public_domain public domain]''' by its author, [http://tango.freedesktop.org/Tango_Desktop_Project The Tango Desktop Project]. This applies worldwide. In some countries this may not be legally possible; if so: [http://tango.freedesktop.org/Tango_Desktop_Project The Tango Desktop Project] grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. 46b41a94b07896fc8cd115e12dd972d0e6c2617e Vorlage:Frage 10 128 966 239 2018-06-03T13:23:48Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:45px;"|[[Bild:Help-browser.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 96f29f63eebbee303604637b9770ba86b753e7ae 968 966 2018-06-03T13:24:37Z Admin 1 wikitext text/x-wiki <div style="align:center; padding:0em 0em 0em 100px;"> {| style="color:black;background-color:#004A7F; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; border:0px; width:100%;" cellpadding="0" cellspacing="0" |style="width:48px;"|[[Bild:Help-browser.png]] |style="background-color:White; padding:0.2em;"|{{{1}}} |} </div> 6f01a338ffcd39509657a935f8854f31e5feb356 Datei:Help-browser.png 6 276 967 2018-06-03T13:24:11Z Admin 1 ==Permission== This work has been released into the '''[https://en.wikipedia.org/wiki/Public_domain public domain]''' by its author, [http://tango.freedesktop.org/Tango_Desktop_Project The Tango Desktop Project]. This applies worldwide. In some countr… wikitext text/x-wiki ==Permission== This work has been released into the '''[https://en.wikipedia.org/wiki/Public_domain public domain]''' by its author, [http://tango.freedesktop.org/Tango_Desktop_Project The Tango Desktop Project]. This applies worldwide. In some countries this may not be legally possible; if so: [http://tango.freedesktop.org/Tango_Desktop_Project The Tango Desktop Project] grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. 46b41a94b07896fc8cd115e12dd972d0e6c2617e Nagios installieren und konfigurieren 0 156 970 753 2018-06-03T13:25:36Z Admin 1 /* Remote Plugin Executor (NRPE) */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo</pre></code> Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigene definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Eine Festplatte könnt Ihr beispielsweise mittels deren UUID wie folgt prüfen: <code><pre> command[check_home]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -x /dev/disk/by-uuid/12345-1234... -p /home</pre></code> Der Parameter '''-x''' steht für das Device, das '''-p''' für den Mountpunkt. <br /><br /> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 88f26dd883933ce8b4805a594fbdadc9df0fa22c Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 971 918 2018-06-03T13:25:55Z Admin 1 /* Gargi's Schlusswort */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet darauf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ===Scripterweiterungen=== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping pyzor --homedir /etc/spamassassin discover</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> db0aaafdf88689f3c437e75f074585589c9fb50b 993 971 2018-06-29T22:52:16Z Admin 1 /* Scripterweiterungen */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban sollten natürlich aktiviert sein. Als Basis verwende ich dann zudem ein Linux Debian 7 (Wheezy).<br> <br> Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen. Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein. <br> <br> Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:<br> <br> [[Bild:mail_schema.jpg|center]] <br /><br /> Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet darauf, dass wir diese zunächst mit '''getmail''' abrufen. Hier wird bereits dann die Mail mit '''Spamassassin''' geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den '''Procmail''' übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm '''ClamAV''' mit '''Clamassassin''' verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server '''Dovecot''', der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den '''Squirrelmail''', der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) '''Exim4''', der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.<br> <br> Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los! <br> <br> ==Installation von Getmail und die Konfiguration== Wir installieren zuerst getmail mit einem <code><pre>apt-get install getmail4</pre></code> Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird: <pre>adduser getmail</pre> Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei '''/etc/ftpusers''' eintragt. <code><pre>nano /etc/ftpusers</pre></code> Startet nach einer Änderung den proftp neu: <code><pre>/etc/init.d/proftpd restart</pre></code> Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit '''adduser''' an und schließt diese aus dem ftp-Zugriff aus.<br> <br> Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der '''/etc/passwd''' für den jeweiligen User hinten das '''/bin/bash''' in '''/bin/false''' abändert. Dann ist auch das Anmelden nicht mehr möglich.<br> <br> Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.<br> <br> Um später aber einen Test mit getmail durch zu führen muss die Änderung in der '''/etc/passwd''' nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.<br> <br> Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.<br> <br> Nun wechseln wir in das Verzeichnis '''/home/getmail''' :<br> <code><pre>cd /home/getmail</pre></code> und legen ein neues verstecktes Verzeichnis an: <code><pre>mkdir .getmail</pre></code> Dort erstellen wir nun eine Konfigurationsdatei: <code><pre>touch .getmail/mailbox1.conf</pre></code> Diese befüllen wir nun mit folgenden Inhalt: <code><pre> [options] verbose = 0 delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers username = username # Der Username des Mailservers password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt </pre></code> ('''''HINWEIS:''''' Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit '''#''' losgeht)<br> <br> Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfigurationsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich <code><pre>arguments = ("-dxyz", )</pre></code> festgelegt. '''xyz''' = der jeweilige Nutzer, der die Mails bekommen soll.<br> <br> Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt: Aus dem Verzeichnis '''/home/getmail''' heraus gebt nun folgende Befehle ab: <code><pre>cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*</pre></code> Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den '''Port 110 (TCP_OUT)''' freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen. <br> <br> ==Installation von Procmail und die Konfiguration== Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein <code><pre>apt-get install procmail</pre></code> ab. Jetzt wechselt in das Verzeichnis des Users '''postfach1''': <code><pre>cd /home/postfach1</pre></code> Dort legt nun eine Konfigurationsdatei an: <code><pre>touch .procmailrc</pre></code> Zudem zwei neue Verzeichnisse: <code><pre>mkdir mail mkdir log</pre></code> Nun befüllt die .procmailrc mit folgenden Inhalt: <code><pre> MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht /dev/null :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang</pre></code> Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.<br> <br> Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen. <br> Damit zum Schluss alle Zugriffsrechte passen, führen wir dann ein <code><pre>chown -R postfach1:postfach1 /home/postfach1/</pre></code> aus. Prüft mit einem '''ls -la''' innerhalb des Verzeichnisses dann nach, ob die Dateien und Verzeichnisse dem User '''postfach1''' gehören. <br> <br> ==Erster Test== Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User '''getmail''' einloggen. Hierfür müssen wir unsere Sperre in der '''/etc/passwd''' rückgängig machen. In der Zeile des Users '''getmail''' ändert dort wieder das '''/bin/false''' auf '''/bin/bash''' ab. Jetzt funktioniert die Anmeldung: <code><pre>su getmail</pre></code> Ändert zum Testen auch in Eurer Getmail Config das <code><pre>delete = true</pre></code> auf <code><pre>delete = false</pre></code> ab, da Ihr garantiert das öfters testen müsst, bis es passt! <br> <br> Führt nun den Abruf aus: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf</pre></code> Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen: <code><pre>getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf</pre></code> Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung: <code><pre> getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped </pre></code> Loggt Euch wieder aus: <code><pre>exit</pre></code> Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.<br> <br> Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit <code><pre>crontab -e</pre></code> Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt: <code><pre>*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1</pre></code> Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.<br> <br> Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den '''getmail''' in der '''/etc/passwd''' und setzt dort den User wieder auf '''/bin/false'''. <br> <br> ==Getmail mit SSL Verbindung== Die Übertragung der Dateien sollte natürlich auch verschlüsselt erfolgen. Die meisten Provider sollten das auch zur Verfügung stellen. Wenn unser Test erfolgreich war, dann stellen wir noch die Konfiguration entsprechend um. Editiert dazu die entsprechende Getmail Konfigurationsdatei: <code><pre>nano /home/getmail/.getmail/mailbox1.conf</pre></code> Die Zeile<br><br> '''type = SimplePOP3Retriever'''<br><br> tauscht in <br><br> '''type = SimplePOP3SSLRetriever'''<br><br> aus. Solltet Ihr ein Firewallscript verwenden, dann müsst Ihr als '''TCP_OUT''' den Port '''995''' eintragen.<br> Führt dann nochmal einen Test wie oben beschrieben durch und prüft damit, ob der Abruf klappt. <br> <br> ==Imap mit Dovecot== Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. <br> <br> Editiert zunächst die '''/etc/hosts''' <code><pre>nano /etc/hosts</pre></code> Die ersten zwei Zeilen sehen ungefähr so aus: <code><pre>127.0.0.1 localhost 127.0.0.1 meinserver.example.org meinserver</pre></code> Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf <code><pre>127.0.0.1 localhost 192.168.1.77 192.168.1.77 meinserver</pre></code> ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren: <code><pre>apt-get install dovecot-common dovecot-imapd</pre></code> Wenn Ihr dann bei der Installation in dem Moment, in dem der Dovecot gestartet wird, eine Meldung<br><br> '''Fatal: Failed to start listeners'''<br> '''failed!''' <br><br> erhaltet, dann kracht es an einer Stelle mit dem IPv6, d.h. wird von Eurem Server nicht unterstützt.<br> Editiert deshalb die '''dovecot.conf''': <code><pre>nano /etc/dovecot/dovecot.conf</pre></code> Schreibt unter die Zeile <br><br> '''#listen = *, ::''' <br><br> folgende Zeile: <br><br> '''listen = *''' <br><br> Startet dann nochmal den Dovecot: <code><pre>/etc/init.d/dovecot restart</pre></code> Der Fehler sollte jetzt weg sein und der Dovecot laufen. <br><br> Während er Installation werden automatisch die Zertifikate<br> <br> '''/etc/dovecot/dovecot.pem'''<br> '''/etc/dovecot/private/dovecot.pem'''<br> <br> für 10 Jahre angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem: <code><pre>dpkg-reconfigure dovecot-common</pre></code> Wir editieren noch drei Dovecot Konfigurationsdateien: <code><pre>nano /etc/dovecot/conf.d/10-mail.conf</pre></code> Hier muss das Standardverzeichnis '''/var/mail''' für die reinkommenden E-Mails von /var/mail auf das Homeverzeichnis umgestellt werden. Ändert deswegen die Mail Location wie folgt ab: <br> <br> '''mail_location = maildir:~/mail'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-auth.conf</pre></code> Sollte man Plaintext Auth verhindern wollen: <br> <br> '''#disable_plaintext_auth = yes'''<br> <br> in <br><br> '''disable_plaintext_auth = yes'''<br> <br> <code><pre>nano /etc/dovecot/conf.d/10-ssl.conf</pre></code> <br> '''#ssl = yes''' <br><br> in <br><br> '''ssl = yes''' <br><br> Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu. <code><pre>/etc/init.d/dovecot restart</pre></code> An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail: <br> <br> ==Squirrelmail Webmailer== Auf einem Debian Webserver (Apache2, php, MySQL) ist [http://www.squirrelmail.org/ Squirrelmail] recht schnell installiert.<br> <br> Zunächst installieren wir Squirrelmail an der Konsole: <code><pre>apt-get install squirrelmail</pre></code> Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden: <code><pre>apt-get install php-db php-pear</pre></code> Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis '''/usr/share/squirrelmail''' . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die '''/etc/apache2/sites-enabled/000-default''' und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!): <code><pre> Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory></pre></code> Damit wird wenn Ihr an Eure URL '''/squirrelmail''' mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.<br> <br> Konfiguriert nun Euren Webmailer mit <code><pre>squirrelmail-configure</pre></code> Ihr seht nun das Hauptmenü: <code><pre> SquirrelMail Configuration : Read: config_default.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> </pre></code> Wählt hier '''D''' aus. Danach seht Ihr folgendes Menü: <code><pre> Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> </pre></code> Wir nehmen hier natürlich den '''dovecot'''.<br> <br> Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt '''2'''): <code><pre> Server Settings General ------- 1. Domain : example.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (dovecot) B. Update SMTP Settings : localhost:25 R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Stellt hier unter '''1.)''' Euren Domain Namen ein. Dann geht in den Unterpunkt '''A.)''': <code><pre> IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Server software : dovecot 9. Delimiter : detect B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf '''993''' für SSL umstellen und Secure Imap auf '''True''' umstellen.<br> <br> Im Unterpunkt '''10''' des Hauptmenüs könnt Ihr noch das '''en_US''' <code><pre> Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false R Return to Main Menu C Turn color on S Save data Q Quit Command >> </pre></code> ... in '''de_DE''' umstellen. Speichert die Änderungen mit '''S''' ab und beendet das Konfigurationsprogramm mit '''Q''' . Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das '''de_DE''' eingestellt habt, dann fehlt Euch noch "'''de_DE iso-8859-1'''" in den '''locales''', da bei einer deutschen Installation standardmäßig nur de_DE UTF-8 ausgewählt wurde. Also führt <code><pre>dpkg-reconfigure locales</pre></code> aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.<br> <br> Danach startet den Apachen neu: <code><pre>/etc/init.d/apache2 restart</pre></code> Ruft nun Euren Webmailer über <code><pre>http://EURE_URL/squirrelmail</pre></code> auf. <br> <br> Jetzt wollen wir nur noch eine Verbindung über https zulassen. Dazu müssen wir dem Apache https als Erweiterung beibringen. Wechselt dazu in Euer Root Home: <code><pre>cd /root</pre></code> Danach legen wir unser Serverzertifikat an: <code><pre>openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr</pre></code> Jetzt werdet Ihr einige Angaben abgefragt: <br> <br> Country Name (Ländercode): = '''DE'''<br> State or Province Name (Bundesland): = zB '''Bayern'''<br> Locality Name, eg. City (Stadt): = zB '''Nuernberg'''<br> Organization Name (Firmenname): = '''hier irgendwas eingeben wie privat, zuhause etc.'''<br> Organizational Unit Name (Abteilung) = '''bleibt leer'''<br> Common Name, eg. YOUR Name: = '''Euer Servername'''<br> Email Adress: = '''eine E-Mail Adresse'''<br> A challenge password: = '''bleibt leer'''<br> An optional company name: = '''bleibt leer'''<br> <br> Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe: <code><pre>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt</pre></code> Noch ein paar Rechte festlegen: <code><pre>chmod 400 server.key</pre></code> Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen: <code><pre>nano /etc/apache2/sites-enabled/000-default</pre></code> Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion: <code><pre><VirtualHost *:443> DocumentRoot /var/www ServerName EUER_SERVERNAME SSLEngine on SSLCertificateFile /root/server.crt SSLCertificateKeyFile /root/server.key Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes AllowOverride All DirectoryIndex index.php Order allow,deny allow from all </Directory> </VirtualHost> </pre></code> '''EUER_SERVERNAME''' muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die '''ports.conf''' <code><pre>nano /etc/apache2/ports.conf</pre></code> und fügt ganz zum Schluss folgende Zeile ein: <br><br> '''NameVirtualHost *:443''' <br><br> Nun aktivieren wir das SSL Modul: <code><pre>a2enmod ssl</pre></code> Der Apache muss jetzt neu gestartet werden: <code><pre>/etc/init.d/apache2 restart</pre></code> Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.<br><br> Wenn Ihr generell auf https umleiten wollt, auch wenn die Adresse über http abgerufen wird, müsst Ihr im Apache das Modul Rewrite aktivieren: <code><pre> a2enmod rewrite /etc/init.d/apache2 restart</pre></code> Legt dann eine '''.htaccess''' Datei in '''/usr/share/squirrelmail''' an: <code><pre>nano /usr/share/squirrelmail/.htaccess</pre></code> Füllt diese mit folgenden Zeilen: <code><pre>Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</pre></code> Nun werden sämtliche Anfragen auf das verschlüsselte https Protokoll umgeleitet. <br><br> Zu guter Letzt wollen wir generell verhindern, dass man von außen einfach einen Zugriff auf das Login des Squirrelmail bekommt. Wir blockieren das deshalb mit '''.htaccess''' und aktivieren eine darüberliegende Passwortabfrage. <br><br> Fügt deshalb in der '''.htaccess''' noch folgendes ein: <code><pre>AuthType Basic AuthName squirrelmail AuthUserFile /usr/share/squirrelmail/.htpasswd require valid-user</pre></code> Ihr seht, dass der Pfad zu dem dann erzeugtem Passwort im Dokumentenroot der Webanwendung liegt. Um das einwenig sicher zu machen, könnt Ihr durchaus dieses in ein anderes Verzeichnis legen, das außerhalb des Dokumentenroot liegt. <br><br> Das Passwort legt Ihr dann in diesem Verzeichnis (mittels '''cd''' dorthin wechseln!) mit einem <code><pre>htpasswd -c .htpasswd username</pre></code> an. Beim Befehl den Usernamen entsprechend Euren Vorstellungen ändern! Jetzt werdet Ihr zusätzlich nach einem Passwort gefragt. <br><br> ==E-Mails via Exim4 verschicken== Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;-)<br> <br> Installiert den Exim4 mit einem <code><pre>apt-get install exim4</pre></code> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br><br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) DNS Anfrage minimieren: '''Ja'''<br> <br> 9.) Versandart bei lokaler Mailzustellung: M'''box Format in /var/mail/'''<br> <br> 10.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> 11.) 11.) Empfänger an die Benutzer "root" und "postmaster": '''leer lassen'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Solltet Ihr eine Fehlermeldung '''exim paniclog /var/log/exim4/paniclog has non-zero size''' erhalten, dann greift Exim4 auf IPv6 zu, ohne dass IPv6 zur Verfügung steht. Entfernt zunächst die '''paniclog''': <code><pre>rm /var/log/exim4/paniclog</pre></code> Lasst nochmal die Konfiguration durchlaufen: <code><pre>dpkg-reconfigure exim4-config</pre></code> Beim Punkt 3 '''IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden''' entfernt hinten das '''; ::1''' . Übernehmt den Rest und startet exim4 wieder neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> <br> ==Viren mit ClamAV herausfiltern== Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere '''sources.list''' erweitern: <code><pre>nano /etc/apt/sources.list</pre></code> Bei unseren Standard Repositories setzen wir dann noch die Source Reopsitiries dazu: <code><pre> deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free </pre></code> Wir frischen nun die Repositories auf: <code><pre>apt-get update</pre></code> Jetzt müssen wir uns insgesamt 3 Pakete bauen:<br><br> '''unrar-nonfree'''<br> '''lha'''<br> '''libclamunrar6'''<br><br> Falls noch nicht geschehen müssen noch die build-essentials installiert werden: <code><pre>apt-get install build-essential</pre></code> Danach legen wir uns ein Arbeitsverzeichnis an und wechslen dorthin: <code><pre>mkdir work cd work </pre></code> Wir beginnen mit '''unrar''': <code><pre>mkdir unrar-nonfree cd unrar-nonfree apt-get build-dep unrar-nonfree apt-get source -b unrar-nonfree </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i unrar_4.1.4-1.deb cd ..</pre></code> Danach das Paket '''lha''': <code><pre>mkdir lha cd lha apt-get build-dep lha apt-get source -b lha </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i lha_.1.14i-10.deb cd ..</pre></code> Wir bleiben im work Verzeichnis und installieren die folgenden Pakete: <code><pre>apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip</pre></code> Fehlermeldungen wegen einer nicht aktuellen Virendatenbank ignorieren wir zunächst.<br> Danach bauen wir uns noch den '''libclamunrar6''': <code><pre>mkdir libclamunrar6 cd libclamunrar6 apt-get build-dep libclamunrar6 apt-get source -b libclamunrar6 </pre></code> Das fertiggestellte Paket seht Ihr als *.deb Paket mit einem '''ls -la'''. Installiert das Paket entsprechend seiner Versionsnummer (ggf. anpassen): <code><pre>dpkg -i libclamunrar6_0.98.5.deb</pre></code> Jetzt aktualisieren wir den ClamAV: <code><pre>freshclam</pre></code> Und nun starten wir den ClamAV durch: <code><pre>/etc/init.d/clamav-daemon start</pre></code> <br><br> '''Variante A) getmail'''<br> <br> Fügt nun in jeder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein: <code><pre> [filter-virus] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) </pre></code> Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert. <br> <br> Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: [http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies http://www.heise.de/security/dienste...e=virendummies] Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.<br> <br> '''Variante B) procmail'''<br> <br> Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.<br> <br> Als erstes installieren wir den clamassassin aus den Repositories: <code><pre>apt-get install clamassassin</pre></code> Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln: <code><pre>cd / mkdir work apt-get install build-essential cd /work</pre></code> Jetzt laden wir uns die Quellen herunter <code><pre>apt-get source clamassassin</pre></code> und wechseln in das Hauptverzeichnis des Quellcodes: <code><pre>cd clamassassin-1.2.4</pre></code> Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben <code><pre>./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***</pre></code> Damit haben wir Folgendes geregelt:<br> <br> -Die übersetzte Datei wird nach /usr/bin installiert<br> -clamassassin wird clamdscan verwenden, wenn dieser läuft<br> -Die Mailüberschrift wird mit ***INFECTED*** markiert<br> <br> Jetzt installieren wir das Script: <code><pre>make install</pre></code> Das sollte ohne Fehler durchlaufen. <br> <br> In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende: <code><pre> 0 fw | /usr/bin/clamassassin :0: * ^X-Virus-Status: Yes .virus/ </pre></code> Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben. Prüft nach, ob der Clamassassin auch tatsächlich filtert, indem Ihr Euch eine Testmail schickt. Im Header dieser Mail solltet Ihr dann folgende Zeile relativ weit unten finden:<br> '''X-Virus-Checker-Version: clamassassin 1.2.4 with clamdscan...''' <br><br> [[Bild:virentest.jpg|virentest]]<br> ''Eine entdeckte Virentestmail'' <br><br> ==Spam tilgen mit Spamassassin== Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.<br> <br> Zuerst installieren wir den Spamassassin: <code><pre>apt-get install spamassassin</pre></code> Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei <code><pre>nano /etc/spamassassin/local.cf</pre></code> Hier bitte bei folgende Zeilen das "#" entfernen um diese zu aktivieren: <code><pre> rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status </pre></code> Unter die drei '''bayes_ignore''' Zeilen schreibt dann bitte noch folgende Zeilen: <code><pre>bayes_ignore_header X-getmail-filter-classifier</pre></code> Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.<br> <br> Jetzt editiert bitte die Datei '''/etc/default/spamassassin'''<br> <br> Dort stellt den Eintrag<br> <code><pre>ENABLED=0</pre></code> auf <code><pre>ENABLED=1</pre></code> Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten: <code><pre>/etc/init.d/spamassassin start</pre></code> Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein: <code><pre> [filter] type = Filter_external path = /usr/bin/spamc </pre></code> Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein: <code><pre> :0 * ^Subject:.******SPAM***** .Junk/ </pre></code> Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.<br> <br> '''Hinweis:''' Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der '''/etc/spamassassin/local.cf''' ab und in der '''.procmailrc'''. Danach natürlich den Spamassassin neu starten: <code><pre>/etc/init.d/spamassassin restart</pre></code> Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können: <code><pre>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no version=3.2.5</pre></code> Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt. <br> <br> ===Spamassassin prüfen=== Der Dienst sollte regelmäßig daraufhin geprüft werden, ob er noch am Laufen ist. Wenn ein Mailserver rund um die Uhr aktiv ist, wäre es schlecht, wenn der Scanner im Hintergrund sich verabschieden sollte. Dazu bauen wir uns unter /usr/local/bin ein eigenes Script, das den Dienst spamd prüft, zur Not neu startet und dann eine E-Mail verschickt. Das Script sieht dann so aus: <code><pre>nano /usr/local/bin/spamdcheck</pre></code> Füllt den Inhalt wie folgt: <code><pre>#!/bin/bash #Spamd checkup for being running #Skript by Gargi 2015 top -b -n 1 | grep /usr/sbin/spamd spamd=$? if [ $spamd = 1 ]; then service spamassassin restart echo "Spamd restarted cause it was not found active!" > /var/log/spamdcheck.log echo "" >> /var/log/spamdcheck.log /etc/init.d/spamassassin status >> /var/log/spamdcheck.log mail -s "[System] Spamd recovered" EURE @ MAILADRESSE < /var/log/spamdcheck.log exit 1 else echo "Spamd alive, nothing to be done" fi </pre></code> Speichert die Änderung und macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/spamdcheck</pre></code> Dies lasst Ihr über den cron alle 5 Minuten beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamdcheck every 5 minutes */5 * * * * /usr/local/bin/spamdcheck > /dev/null</pre></code> <br><br> ===Spamassassin regelmäßig aktualisieren=== Um den Spamassassin regelmäßig zu aktualisieren richten wir uns ein kleines Skript ein: <code><pre>nano /usr/local/bin/sa-updater</pre></code> Dies füllt mit folgenden Inhalt: <code><pre>#!/bin/bash /usr/bin/sa-update date > /var/log/sa-update.log echo "updated spamassassin" >> /var/log/sa-update.log</pre></code> Danach macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/sa-updater</pre></code> Dies lasst Ihr über den cron ein mal am Tag beispielsweise laufen: <code><pre>crontab -e</pre></code> <code><pre># Spamassassin Update 2 o clock in the morning 1 2 * * * /usr/local/bin/sa-updater > /dev/null</pre></code> <br><br> ===Scripterweiterungen=== An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.<br> <br> '''a) Razor und Pyzor anwenden''' <br> Eine Erweiterung für den Spamassassin stellt '''razor''' und '''pyzor''' dar. Via einer Checksumme werden Mails dann mit einer Datenbank verglichen. Wurde eine Spammail von mehreren Usern gemeldet, dann wird eine empfangene Spammail als solche auf Basis dieser Meldungen auf dem lokalen Server von Spamassassin erkannt.<br> Stellt zunächst einmal fest, dass die '''UDP Ports 24441''' (in + out für pyzor) und '''TCP Port 2703''' (out für razor) offen sind und passt gegebenfalls Eure Firewall an.<br> <br> Jetzt installiert die beiden Pakete; <code><pre>apt-get install razor pyzor</pre></code> Die Spamassassin Konfiguration wird automatisch angepasst. Führt nun noch folgende Befehle aus, um den razor zu aktivieren: <code><pre>razor-admin -d -home=/etc/razor -create razor-admin -d -home=/etc/razor -register</pre></code> Testet noch, ob pyzor nach außen funken kann: <code><pre>pyzor ping echo "test" | spamassassin -D pyzor 2>&1 | less</pre></code> Ein '''public.pyzor.org:24441 (200, 'OK')''' deutet darauf hin, dass die Kommunikation funktioniert. Ändert dann die '''/etc/spamassassin/local.cf''' und fügt unter den Bayes Bereich noch folgendes mit ein: <code><pre>use_pyzor 1 pyzor_path /usr/bin/pyzor use_razor2 1 razor_config /etc/razor/razor-agent.conf</pre></code> Startet Euren Spamassassin neu: <code><pre>/etc/init.d/spamassassin restart</pre></code> Schaut Euch dann die gefilterten Spam Mails an. Wenn alles klappt, dann findet Ihr Pyzor und Razor Punkte entsprechend gelistet.<br> z.B. Razor: <code><pre> 2.4 RAZOR2_CF_RANGE_E8_51_100 Razor2 gives engine 8 confidence level above 50% [cf: 100] 0.4 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50% [cf: 100] 1.7 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)</pre></code> z.B. Pyzor: <code><pre>2.0 PYZOR_CHECK Listed in Pyzor (http://pyzor.sf.net/)</pre></code> <br> <br> '''b) Mails mit speziellen Anhängen filtern'''<br> Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der User sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen: <code><pre> :0 B: * name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*) .dangerous/ </pre></code> Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel. <br> <br> ==Gargi's Schlusswort== Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!<br> <br> Viel Spaß!<br> Euer<br> Gargi<br> <br> <br> '''''Quellen'''''<br> [http://www.dovecot.org Dovecot]<br> [http://pyropus.ca/software/getmail Getmail]<br> [http://www.procmail.org Procmail]<br> [http://spamassassin.apache.org Spamassassin]<br> [http://sourceforge.net/projects/pyzor/ Pyzor]<br> [http://www.clamav.net ClamAV]<br> [http://jameslick.com/clamassassin ClamAssassin]<br> [http://www.squirrelmail.org Squirrelmail]<br> [http://www.debian.org Debian]<br> <br> '''''Literatur'''''<br> [http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1 Spam & Viren bekämpfen]<br> [http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ Debian Server]<br> [http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ Postfix]<br> [http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ Linux Server Hacks]<br> [http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ 100 neue Linux Server Hacks]<br> <br> f9cf44db57c3d7f420e0986ba4f2871a06ae5c0a Der dedizierte Quake3 Server 0 263 972 870 2018-06-03T13:26:13Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Vorbereitung== Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können. <code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code> Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home: <code><pre>mkdir /home/work</pre></code> Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden. <code><pre>adduser gameserver</pre></code> <br> ==libsdl2 kompilieren== Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis: <code><pre>cd /home/work</pre></code> Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads] <code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code> Danach müsst Ihr das Paket umbenennen: <code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code> Danach wird das Paket entpackt: <code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code> Wechselt danach in das neue Verzeichnis <code><pre>cd SDL2-2.0.3</pre></code> Startet den Compile: <code><pre>debuild -uc -us</pre></code> Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.: <code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code> Danach nochmal den Compile sterten. Er sollte nun durchlaufen: <code><pre>debuild -uc -us</pre></code> Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann: <code><pre>cd /home/work dpkg -i libsdl2_2.0.3_armhf.deb dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code> <br> ==Den Quake 3 Server bauen und konfigurieren== Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Quellverzeichnis: <code><pre>cd quake3</pre></code> Der Compile wird wie folgt gestartet: <code><pre>make -j5 copyfiles</pre></code> Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten). <br><br> [[Bild:q3bauen.jpg|Q3 Build]] <br><br> Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code> <br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> <br> ==Startscript und ein init Script schreiben== Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an: <code><pre>nano /usr/local/bin/q3serverstart</pre></code> Das füllen wir mit folgendem Inhalt: <code><pre>#!/bin/sh pkill -u gameserver su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code> Macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code> Testet das Script, indem Ihr es startet: <code><pre>q3serverstart</pre></code> Ein '''htop''' sollte Auskunft geben, ob der Server läuft:<br><br> [[Bild:q3running.jpg|Läuft]] <br><br> Danach bauen wir uns das init Script: <code><pre>nano /etc/init.d/q3ded</pre></code> Dieses füllt wie folgt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: dedicated q3server start # Required-Start: $remote_fs $syslog $network $firewall # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: q3serverstart initscript # Description: Custom quake3start, placed in /etc/init.d. # script written by Gargi 2015 http://www.gargi.org ### END INIT INFO #needed modules case "$1" in start) pkill -u gameserver /usr/local/bin/q3serverstart echo "Starting Quake3 server ... ready to frag" ;; stop) pkill -u quaker echo "Quake3 Server stopped. " ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac</pre></code> Auch das Skript braucht den x-Flag, damit es startet: <code><pre>chmod +x /etc/init.d/q3ded</pre></code> Ihr könnt nun mit einem <code><pre>/etc/init.d/q3ded start</pre></code> den Server starten, oder wie folgt stoppen: <code><pre>/etc/init.d/q3ded stop</pre></code> Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein: <code><pre> cd /etc/init.d update-rc.d q3ded defaults</pre></code> Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server. <br><br> ==Buildscript für den Quake 3 Server== Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht: :# Einmal am Tag prüfen, ob eine neue Version vorhanden :# Falls ja, neue Quellen herunterladen und kompilieren :# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten :# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren :# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version Legt eine neue Datei an: <code><pre>nano /usr/local/bin/q3check</pre></code> Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst: <code><pre> #!/bin/bash #script written by Gargi 2015 http://www.gargi.org quakeuser=gameserver // Der User, der den Quakeserver startet. work_dir=/home/work // Euer Arbeitsverzeichnis files=/home/gameserver/files // Das Verzeichnis, in dem das tar.gz Paket kopiert wird fileuser=gameserver // User, der auf das Paket zugreifen darf server_cfg=server.cfg // Name Eurer Q3 Serverkonfiguration mailadresse=meine@mail.adresse // Eure E-mail Adresse madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm $work_dir/version_alt.txt mv $work_dir/version.txt $work_dir/version_alt.txt #get latest files cd $work_dir rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd $work_dir/quake3 git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt #check if something is to be done ver_neu=$(cat $work_dir/version.txt) ver_alt=$(cat $work_dir/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt exit 1 else rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt #build new linux version pkill -u $quakeuser rm -R /usr/local/games/quake3 make -j5 copyfiles #built date reminder rm $work_dir/built.txt date +%d.%m.%Y > $work_dir/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log fi fi </pre></code> Nach dem Speichern machen wir die Datei noch ausführbar: <code><pre>chmod +x /usr/local/bin/q3check</pre></code> Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll: <code><pre>crontab -e</pre></code> Am Schluss fügt folgendes ein: <code><pre># Check for new Quakefiles at 6 o clock morning 1 6 * * * /usr/local/bin/q3check > /dev/null</pre></code> Speichert die Änderung. <br><br> Happy Quaking! <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.debian.org Debian Linux]<br> [http://www.gargi.org Gargi.org - Page und Forum]<br> <br> <br> Pierre "Gargi" Kretschmer c46aef74227fd092f998521c8cd84cbb8b2d3b70 973 972 2018-06-03T13:26:25Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Vorbereitung== Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können. <code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code> Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home: <code><pre>mkdir /home/work</pre></code> Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden. <code><pre>adduser gameserver</pre></code> <br> ==libsdl2 kompilieren== Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis: <code><pre>cd /home/work</pre></code> Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads] <code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code> Danach müsst Ihr das Paket umbenennen: <code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code> Danach wird das Paket entpackt: <code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code> Wechselt danach in das neue Verzeichnis <code><pre>cd SDL2-2.0.3</pre></code> Startet den Compile: <code><pre>debuild -uc -us</pre></code> Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.: <code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code> Danach nochmal den Compile sterten. Er sollte nun durchlaufen: <code><pre>debuild -uc -us</pre></code> Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann: <code><pre>cd /home/work dpkg -i libsdl2_2.0.3_armhf.deb dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code> <br> ==Den Quake 3 Server bauen und konfigurieren== Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Quellverzeichnis: <code><pre>cd quake3</pre></code> Der Compile wird wie folgt gestartet: <code><pre>make -j5 copyfiles</pre></code> Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten). <br><br> [[Bild:q3bauen.jpg|Q3 Build]] <br><br> Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code> <br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> <br> ==Startscript und ein init Script schreiben== Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an: <code><pre>nano /usr/local/bin/q3serverstart</pre></code> Das füllen wir mit folgendem Inhalt: <code><pre>#!/bin/sh pkill -u gameserver su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code> Macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code> Testet das Script, indem Ihr es startet: <code><pre>q3serverstart</pre></code> Ein '''htop''' sollte Auskunft geben, ob der Server läuft:<br><br> [[Bild:q3running.jpg|Läuft]] <br><br> Danach bauen wir uns das init Script: <code><pre>nano /etc/init.d/q3ded</pre></code> Dieses füllt wie folgt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: dedicated q3server start # Required-Start: $remote_fs $syslog $network $firewall # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: q3serverstart initscript # Description: Custom quake3start, placed in /etc/init.d. # script written by Gargi 2015 http://www.gargi.org ### END INIT INFO #needed modules case "$1" in start) pkill -u gameserver /usr/local/bin/q3serverstart echo "Starting Quake3 server ... ready to frag" ;; stop) pkill -u quaker echo "Quake3 Server stopped. " ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac</pre></code> Auch das Skript braucht den x-Flag, damit es startet: <code><pre>chmod +x /etc/init.d/q3ded</pre></code> Ihr könnt nun mit einem <code><pre>/etc/init.d/q3ded start</pre></code> den Server starten, oder wie folgt stoppen: <code><pre>/etc/init.d/q3ded stop</pre></code> Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein: <code><pre> cd /etc/init.d update-rc.d q3ded defaults</pre></code> Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server. <br><br> ==Buildscript für den Quake 3 Server== Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht: :# Einmal am Tag prüfen, ob eine neue Version vorhanden :# Falls ja, neue Quellen herunterladen und kompilieren :# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten :# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren :# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version Legt eine neue Datei an: <code><pre>nano /usr/local/bin/q3check</pre></code> Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst: <code><pre> #!/bin/bash #script written by Gargi 2015 http://www.gargi.org quakeuser=gameserver // Der User, der den Quakeserver startet. work_dir=/home/work // Euer Arbeitsverzeichnis files=/home/gameserver/files // Das Verzeichnis, in dem das tar.gz Paket kopiert wird fileuser=gameserver // User, der auf das Paket zugreifen darf server_cfg=server.cfg // Name Eurer Q3 Serverkonfiguration mailadresse=meine@mail.adresse // Eure E-mail Adresse madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm $work_dir/version_alt.txt mv $work_dir/version.txt $work_dir/version_alt.txt #get latest files cd $work_dir rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd $work_dir/quake3 git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt #check if something is to be done ver_neu=$(cat $work_dir/version.txt) ver_alt=$(cat $work_dir/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt exit 1 else rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt #build new linux version pkill -u $quakeuser rm -R /usr/local/games/quake3 make -j5 copyfiles #built date reminder rm $work_dir/built.txt date +%d.%m.%Y > $work_dir/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log fi fi </pre></code> Nach dem Speichern machen wir die Datei noch ausführbar: <code><pre>chmod +x /usr/local/bin/q3check</pre></code> Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll: <code><pre>crontab -e</pre></code> Am Schluss fügt folgendes ein: <code><pre># Check for new Quakefiles at 6 o clock morning 1 6 * * * /usr/local/bin/q3check > /dev/null</pre></code> Speichert die Änderung. <br><br> Happy Quaking! <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.debian.org Debian Linux]<br> <br> Pierre "Gargi" Kretschmer 5eb067be7c9caea022d2a923365dc3cc17124ddc 974 973 2018-06-03T13:27:49Z Admin 1 /* Startscript und ein init Script schreiben */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Vorbereitung== Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können. <code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code> Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home: <code><pre>mkdir /home/work</pre></code> Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden. <code><pre>adduser gameserver</pre></code> <br> ==libsdl2 kompilieren== Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis: <code><pre>cd /home/work</pre></code> Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads] <code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code> Danach müsst Ihr das Paket umbenennen: <code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code> Danach wird das Paket entpackt: <code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code> Wechselt danach in das neue Verzeichnis <code><pre>cd SDL2-2.0.3</pre></code> Startet den Compile: <code><pre>debuild -uc -us</pre></code> Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.: <code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code> Danach nochmal den Compile sterten. Er sollte nun durchlaufen: <code><pre>debuild -uc -us</pre></code> Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann: <code><pre>cd /home/work dpkg -i libsdl2_2.0.3_armhf.deb dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code> <br> ==Den Quake 3 Server bauen und konfigurieren== Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Quellverzeichnis: <code><pre>cd quake3</pre></code> Der Compile wird wie folgt gestartet: <code><pre>make -j5 copyfiles</pre></code> Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten). <br><br> [[Bild:q3bauen.jpg|Q3 Build]] <br><br> Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code> <br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> <br> ==Startscript und ein init Script schreiben== Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an: <code><pre>nano /usr/local/bin/q3serverstart</pre></code> Das füllen wir mit folgendem Inhalt: <code><pre>#!/bin/sh pkill -u gameserver su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code> Macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code> Testet das Script, indem Ihr es startet: <code><pre>q3serverstart</pre></code> Ein '''htop''' sollte Auskunft geben, ob der Server läuft:<br><br> <br><br> Danach bauen wir uns das init Script: <code><pre>nano /etc/init.d/q3ded</pre></code> Dieses füllt wie folgt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: dedicated q3server start # Required-Start: $remote_fs $syslog $network $firewall # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: q3serverstart initscript # Description: Custom quake3start, placed in /etc/init.d. # script written by Gargi 2015 http://www.gargi.org ### END INIT INFO #needed modules case "$1" in start) pkill -u gameserver /usr/local/bin/q3serverstart echo "Starting Quake3 server ... ready to frag" ;; stop) pkill -u quaker echo "Quake3 Server stopped. " ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac</pre></code> Auch das Skript braucht den x-Flag, damit es startet: <code><pre>chmod +x /etc/init.d/q3ded</pre></code> Ihr könnt nun mit einem <code><pre>/etc/init.d/q3ded start</pre></code> den Server starten, oder wie folgt stoppen: <code><pre>/etc/init.d/q3ded stop</pre></code> Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein: <code><pre> cd /etc/init.d update-rc.d q3ded defaults</pre></code> Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server. <br><br> ==Buildscript für den Quake 3 Server== Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht: :# Einmal am Tag prüfen, ob eine neue Version vorhanden :# Falls ja, neue Quellen herunterladen und kompilieren :# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten :# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren :# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version Legt eine neue Datei an: <code><pre>nano /usr/local/bin/q3check</pre></code> Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst: <code><pre> #!/bin/bash #script written by Gargi 2015 http://www.gargi.org quakeuser=gameserver // Der User, der den Quakeserver startet. work_dir=/home/work // Euer Arbeitsverzeichnis files=/home/gameserver/files // Das Verzeichnis, in dem das tar.gz Paket kopiert wird fileuser=gameserver // User, der auf das Paket zugreifen darf server_cfg=server.cfg // Name Eurer Q3 Serverkonfiguration mailadresse=meine@mail.adresse // Eure E-mail Adresse madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm $work_dir/version_alt.txt mv $work_dir/version.txt $work_dir/version_alt.txt #get latest files cd $work_dir rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd $work_dir/quake3 git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt #check if something is to be done ver_neu=$(cat $work_dir/version.txt) ver_alt=$(cat $work_dir/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt exit 1 else rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt #build new linux version pkill -u $quakeuser rm -R /usr/local/games/quake3 make -j5 copyfiles #built date reminder rm $work_dir/built.txt date +%d.%m.%Y > $work_dir/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log fi fi </pre></code> Nach dem Speichern machen wir die Datei noch ausführbar: <code><pre>chmod +x /usr/local/bin/q3check</pre></code> Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll: <code><pre>crontab -e</pre></code> Am Schluss fügt folgendes ein: <code><pre># Check for new Quakefiles at 6 o clock morning 1 6 * * * /usr/local/bin/q3check > /dev/null</pre></code> Speichert die Änderung. <br><br> Happy Quaking! <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.debian.org Debian Linux]<br> <br> Pierre "Gargi" Kretschmer 78e185cb2e323d15b0a4bb6fd356b8ec4094ce4f 975 974 2018-06-03T13:28:14Z Admin 1 /* Startscript und ein init Script schreiben */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Vorbereitung== Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können. <code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code> Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home: <code><pre>mkdir /home/work</pre></code> Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden. <code><pre>adduser gameserver</pre></code> <br> ==libsdl2 kompilieren== Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis: <code><pre>cd /home/work</pre></code> Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads] <code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code> Danach müsst Ihr das Paket umbenennen: <code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code> Danach wird das Paket entpackt: <code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code> Wechselt danach in das neue Verzeichnis <code><pre>cd SDL2-2.0.3</pre></code> Startet den Compile: <code><pre>debuild -uc -us</pre></code> Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.: <code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code> Danach nochmal den Compile sterten. Er sollte nun durchlaufen: <code><pre>debuild -uc -us</pre></code> Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann: <code><pre>cd /home/work dpkg -i libsdl2_2.0.3_armhf.deb dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code> <br> ==Den Quake 3 Server bauen und konfigurieren== Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Quellverzeichnis: <code><pre>cd quake3</pre></code> Der Compile wird wie folgt gestartet: <code><pre>make -j5 copyfiles</pre></code> Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten). <br><br> [[Bild:q3bauen.jpg|Q3 Build]] <br><br> Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code> <br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> <br> ==Startscript und ein init Script schreiben== Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an: <code><pre>nano /usr/local/bin/q3serverstart</pre></code> Das füllen wir mit folgendem Inhalt: <code><pre>#!/bin/sh pkill -u gameserver su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code> Macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code> Testet das Script, indem Ihr es startet: <code><pre>q3serverstart</pre></code> Ein '''htop''' sollte Auskunft geben, ob der Server läuft:<br><br> <br> Danach bauen wir uns das init Script: <code><pre>nano /etc/init.d/q3ded</pre></code> Dieses füllt wie folgt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: dedicated q3server start # Required-Start: $remote_fs $syslog $network $firewall # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: q3serverstart initscript # Description: Custom quake3start, placed in /etc/init.d. # script written by Gargi 2015 http://www.gargi.org ### END INIT INFO #needed modules case "$1" in start) pkill -u gameserver /usr/local/bin/q3serverstart echo "Starting Quake3 server ... ready to frag" ;; stop) pkill -u quaker echo "Quake3 Server stopped. " ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac</pre></code> Auch das Skript braucht den x-Flag, damit es startet: <code><pre>chmod +x /etc/init.d/q3ded</pre></code> Ihr könnt nun mit einem <code><pre>/etc/init.d/q3ded start</pre></code> den Server starten, oder wie folgt stoppen: <code><pre>/etc/init.d/q3ded stop</pre></code> Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein: <code><pre> cd /etc/init.d update-rc.d q3ded defaults</pre></code> Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server. <br><br> ==Buildscript für den Quake 3 Server== Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht: :# Einmal am Tag prüfen, ob eine neue Version vorhanden :# Falls ja, neue Quellen herunterladen und kompilieren :# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten :# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren :# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version Legt eine neue Datei an: <code><pre>nano /usr/local/bin/q3check</pre></code> Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst: <code><pre> #!/bin/bash #script written by Gargi 2015 http://www.gargi.org quakeuser=gameserver // Der User, der den Quakeserver startet. work_dir=/home/work // Euer Arbeitsverzeichnis files=/home/gameserver/files // Das Verzeichnis, in dem das tar.gz Paket kopiert wird fileuser=gameserver // User, der auf das Paket zugreifen darf server_cfg=server.cfg // Name Eurer Q3 Serverkonfiguration mailadresse=meine@mail.adresse // Eure E-mail Adresse madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm $work_dir/version_alt.txt mv $work_dir/version.txt $work_dir/version_alt.txt #get latest files cd $work_dir rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd $work_dir/quake3 git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt #check if something is to be done ver_neu=$(cat $work_dir/version.txt) ver_alt=$(cat $work_dir/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt exit 1 else rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt #build new linux version pkill -u $quakeuser rm -R /usr/local/games/quake3 make -j5 copyfiles #built date reminder rm $work_dir/built.txt date +%d.%m.%Y > $work_dir/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log fi fi </pre></code> Nach dem Speichern machen wir die Datei noch ausführbar: <code><pre>chmod +x /usr/local/bin/q3check</pre></code> Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll: <code><pre>crontab -e</pre></code> Am Schluss fügt folgendes ein: <code><pre># Check for new Quakefiles at 6 o clock morning 1 6 * * * /usr/local/bin/q3check > /dev/null</pre></code> Speichert die Änderung. <br><br> Happy Quaking! <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.debian.org Debian Linux]<br> <br> Pierre "Gargi" Kretschmer b9fa0e417a39d0c8488d393da9d6f42ceefb205f 976 975 2018-06-03T13:28:35Z Admin 1 /* Startscript und ein init Script schreiben */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:q3_kulli.jpg|logo]] <br /> ''Logo Phantasie''</div> '''Prolog'''<br> <br> Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br> <br> Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br> <br> Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br> <br> Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br> <br> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:orbi.jpg|orbi]] <br /> ''Quake3 Gladiator aus dem Kugelschreiber''</div> Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br> Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br> <br> Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br> <br> Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br> <br> Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode! <br> <br> ==Vorbereitung== Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können. <code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code> Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home: <code><pre>mkdir /home/work</pre></code> Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden. <code><pre>adduser gameserver</pre></code> <br> ==libsdl2 kompilieren== Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis: <code><pre>cd /home/work</pre></code> Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads] <code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code> Danach müsst Ihr das Paket umbenennen: <code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code> Danach wird das Paket entpackt: <code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code> Wechselt danach in das neue Verzeichnis <code><pre>cd SDL2-2.0.3</pre></code> Startet den Compile: <code><pre>debuild -uc -us</pre></code> Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.: <code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code> Danach nochmal den Compile sterten. Er sollte nun durchlaufen: <code><pre>debuild -uc -us</pre></code> Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann: <code><pre>cd /home/work dpkg -i libsdl2_2.0.3_armhf.deb dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code> <br> ==Den Quake 3 Server bauen und konfigurieren== Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen: <code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code> Danach wechseln wir in das Quellverzeichnis: <code><pre>cd quake3</pre></code> Der Compile wird wie folgt gestartet: <code><pre>make -j5 copyfiles</pre></code> Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten). <br><br> [[Bild:q3bauen.jpg|Q3 Build]] <br><br> Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br> <br> Wir legen nun noch einen Link auf unsere Serverbinärdatei: <code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code> Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br> Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an: <code><pre>mkdir .q3a mkdir .q3a/baseq3</pre></code> <br> <div style="float:right;padding-left:20px"> [[Bild:rocket_kulli.jpg|Launcher]] </div> Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br> <br> Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux] Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br> <br> Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen: <code><pre>screen</pre></code> Danach kann der Server gestartet werden: <code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code> Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem <code><pre>screen -R</pre></code> den laufenden Server wieder aufrufen.<br> <br> '''Hinweise:'''<br> a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br> <br> b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br> - UDP IN: 27960 <br> - UDP OUT: 27950 und 27960 <br> - Router auf internen Server: UDP IN 27960 -> IP interner Server <br> <br> <br> ==Startscript und ein init Script schreiben== Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an: <code><pre>nano /usr/local/bin/q3serverstart</pre></code> Das füllen wir mit folgendem Inhalt: <code><pre>#!/bin/sh pkill -u gameserver su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code> Macht das Skript ausführbar: <code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code> Testet das Script, indem Ihr es startet: <code><pre>q3serverstart</pre></code> Ein '''htop''' sollte Auskunft geben, ob der Server läuft. Danach bauen wir uns das init Script: <code><pre>nano /etc/init.d/q3ded</pre></code> Dieses füllt wie folgt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: dedicated q3server start # Required-Start: $remote_fs $syslog $network $firewall # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: q3serverstart initscript # Description: Custom quake3start, placed in /etc/init.d. # script written by Gargi 2015 http://www.gargi.org ### END INIT INFO #needed modules case "$1" in start) pkill -u gameserver /usr/local/bin/q3serverstart echo "Starting Quake3 server ... ready to frag" ;; stop) pkill -u quaker echo "Quake3 Server stopped. " ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac</pre></code> Auch das Skript braucht den x-Flag, damit es startet: <code><pre>chmod +x /etc/init.d/q3ded</pre></code> Ihr könnt nun mit einem <code><pre>/etc/init.d/q3ded start</pre></code> den Server starten, oder wie folgt stoppen: <code><pre>/etc/init.d/q3ded stop</pre></code> Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein: <code><pre> cd /etc/init.d update-rc.d q3ded defaults</pre></code> Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server. <br><br> ==Buildscript für den Quake 3 Server== Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht: :# Einmal am Tag prüfen, ob eine neue Version vorhanden :# Falls ja, neue Quellen herunterladen und kompilieren :# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten :# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren :# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version Legt eine neue Datei an: <code><pre>nano /usr/local/bin/q3check</pre></code> Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst: <code><pre> #!/bin/bash #script written by Gargi 2015 http://www.gargi.org quakeuser=gameserver // Der User, der den Quakeserver startet. work_dir=/home/work // Euer Arbeitsverzeichnis files=/home/gameserver/files // Das Verzeichnis, in dem das tar.gz Paket kopiert wird fileuser=gameserver // User, der auf das Paket zugreifen darf server_cfg=server.cfg // Name Eurer Q3 Serverkonfiguration mailadresse=meine@mail.adresse // Eure E-mail Adresse madeat=$(date +%Y_%m_%d) #before doing anything check server availability ping -c 1 github.com if [ $? != 0 ]; then echo "Server down, stopping now!" exit 1 else #prepare version.txt rm $work_dir/version_alt.txt mv $work_dir/version.txt $work_dir/version_alt.txt #get latest files cd $work_dir rm -R quake3 git clone git://github.com/ioquake/ioq3.git quake3 #write new version.txt cd $work_dir/quake3 git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt #check if something is to be done ver_neu=$(cat $work_dir/version.txt) ver_alt=$(cat $work_dir/version_alt.txt) if [ $ver_neu = $ver_alt ]; then rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt exit 1 else rm $work_dir/aktuell.txt rm $work_dir/unveraendert.txt echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt #build new linux version pkill -u $quakeuser rm -R /usr/local/games/quake3 make -j5 copyfiles #built date reminder rm $work_dir/built.txt date +%d.%m.%Y > $work_dir/built.txt #server start su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg' #upload installpackage cd /usr/local/games tar cf ioq3_git-$ver_neu.$madeat.tar . gzip ioq3_git-$ver_neu.$madeat.tar cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/ chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz rm /usr/local/games/*.gz #call the boss rm /var/log/quakeready.log echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log fi fi </pre></code> Nach dem Speichern machen wir die Datei noch ausführbar: <code><pre>chmod +x /usr/local/bin/q3check</pre></code> Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll: <code><pre>crontab -e</pre></code> Am Schluss fügt folgendes ein: <code><pre># Check for new Quakefiles at 6 o clock morning 1 6 * * * /usr/local/bin/q3check > /dev/null</pre></code> Speichert die Änderung. <br><br> Happy Quaking! <br><br> ==Links== [http://www.ioquake3.org ioquake3 Projekt Seite]<br> [http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br> [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br> [http://www.debian.org Debian Linux]<br> <br> Pierre "Gargi" Kretschmer ad8848df0bde2db589adc82808713fed04bccba6 1019 976 2018-06-30T11:15:10Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Der_dedizierte_Quake3_Server“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Der_dedizierte_Quake3_Server 612d64a795c81e024147b50b04668f3e40482f70 Raspberry Pi 2 Model B: Blick auf die Platine 0 226 977 796 2018-06-03T13:30:01Z Admin 1 wikitext text/x-wiki <div style="float:right;text-align:center;padding-left:20px"> [[Bild:rpi2.jpg|raspi2]] <br /> ''A big one... Raspberry Pi2''</div> Der Raspberry Pi 2 Model B ersetzte im Februar 2015 das Vorgängermodel Raspberry Pi Model B. Der Raspberry Pi 2 kommt mit folgender Spezifikation: :* 900MHz Quad-Core ARM Cortex-A7 CPU :* 1GB RAM :* 4 USB Ports :* 40 GPIO Pins :* Full HDMI Port :* Ethernet Port :* Kombinierter 3.5mm Audio Anschluss und Komposit Video :* Camera Interface (CSI) :* Display Interface (DSI) :* Micro SD Karten Slot :* VideoCore IV 3D Grafik Kern Da der Pi2 eine relativ geringe Stromaufnahme hat, eignet er sich auch wunderbar als kleiner Webserver für den Heimbereich. Gerade die 4 Kernvariante eignet sich besonders gut, da die am Server entstehende Last parallel auf den 4 Kernen abgearbeitet werden kann. Auch Kompilierungsvorgänge sind im Vergleich zu dem Vorgänger enorm beschleunigt. <br><br> Mit einen kleinen Trick kann eine externe USB Festplatte auch ohne einem stromgestützen HUB betrieben werden, und Daten im Netz bereit gestellt werden. Der Verbrauch mit einer laufenden externen Festplatte bewegt sich zwischen 3 - 5 Watt, was als sparsam betrachtet werden kann. Bei einem Stromausfall startet das Gerät neu durch. Es ist dennoch ein Puffer in Form eines [https://de.wikipedia.org/wiki/Unterbrechungsfreie_Stromversorgung USV Systems] zu empfehlen, da ein unkontrolliertes Abschalten auch immer das Risiko mit sich bringt, einen Dateisystemfehler auf gerade den empfindlichen SD Karten zu provozieren. Ein Backup eines laufenden Servers für solche Fälle ist damit keine verkehrte Idee. <br><br> [[Bild:multicore.jpg|multicore]] <br><br> Ein Gerät, was auf jeden Fall als Heimserver sehr interessant ist.<br><br> Euer<br> Gargi e16ff0086932de29d3c27ff4b814020b0fe722ee 1015 977 2018-06-30T11:09:09Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Raspberry_Pi_2_Model_B:_Blick_auf_die_Platine“ wikitext text/x-wiki Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Raspberry_Pi_2_Model_B:_Blick_auf_die_Platine 0fc32cdc55749f1bbd5b6a415c2031cbb9ad0c00 Debian installieren 0 176 978 638 2018-06-03T13:30:24Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> <div id="tutframe"><div id="framenum">37.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian48.jpg]] </div> Wer mag, der kann an dieser Stelle an der Paketverwendungserfassung teilnehmen. Muss man aber nicht unbedingt ... </div> <div id="tutframe"><div id="framenum">38.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian49.jpg]] </div> Nun wählen wir die gewünschten Softwarepakete aus. Uns genügen die Standard-Systemwerkzeuge. Wer mag, der kann auch den ssh-Server gleich voreinstellen, das lässt sich aber wie ich noch zeige schnell per Hand nachholen. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">39.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian50.jpg]] </div> Die Pakete werden nun installiert. Es hängt von der Geschwindigkeit der Internetverbindung ab, wie lange der Vorgang dauert. Da es sich aber nur im wenige Pakete handelt, geht das verhältnismäßig schnell. </div> <div id="tutframe"><div id="framenum">40.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian51.jpg]] </div> Zuletzt installieren wir den Bootloader in den Master Boot Record. Hier geht es mit '''Ja''' weiter. </div> <div id="tutframe"><div id="framenum">41.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian52.jpg]] </div> Geschafft. Der Server kann nun zum ersten Mal neu gebootet werden. Werft nachdem der Rechner heruntergefahren ist, die CD wieder aus. <br /><br /> Hier mit '''Weiter''' fortfahren. </div> <br /><br /> ==Der erste Start== <div id="tutframe"><div id="framenum">42.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian54.jpg]] </div> Wenn alles richtig gelaufen ist, dann seht Ihr den Bootloader Eueres neuen Systems. Lasst den ersten Wert voreingestellt und startet das System. <br /><br /> Hier mit '''Enter''' fortfahren. </div> <div id="tutframe"><div id="framenum">43.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian56.jpg]] </div> Wenn der Server durchgestartet ist, dann könnt Ihr Euch als root einloggen. </div> <br /><br /> Jetzt installieren wir noch unsere ersten wichtigen Pakete wie den ssh nach: <code><pre>apt-get install mc nano ssh htop</pre></code> Ihr könnt Euch nun mittels ssh auf Euren Server remote einloggen und weiter arbeiten. <br /><br /> ==Links== '''Debian:''' http://www.debian.org<br /> '''Diskussionsforum:''' http://www.gargi.org/showthread.php?4187-Debian-Server-6-installieren<br /> Pierre "Gargi" Kretschmer 61450eea47655af23b359c4860b6fbb04d4e3a70 979 978 2018-06-03T13:30:35Z Admin 1 /* Links */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:openlogo-nd-100.jpg|logo]] <br /><br /> </div> Das folgende Tutorial beschreibt die Installation eines Debian Servers, der später als Web, FTP, E-Mail oder auch Samba Server verwendet werden kann. Ich zeige das an einem derzeit aktuellem '''Debian 6 Squeeze''' in einer 64 bit Version auf. Die folgende Vorgehensweise kann man natürlich auch für die 32 bit oder gar ARM Variante anwenden. <br /><br /> Da ich einen Webinstaller verwende, ist hierfür eine Internetverbindung notwendig. Für den ersten externen Connect auf den Server werden wir dann noch den ssh installieren. <br /><br /> ==Vorbereitung== Die Debian Projekt Seite findet sich unter http://www.debian.org. Um den Netinstaller herunter zu laden, rufen wir folgende URL auf: http://www.debian.org/distrib/netinst Dort bitte die gewünschte Version als ISO Datei herunter laden. Diese kann dann mit einem Brennprogramm auf eine CD kopiert werden. Alternativ geht auch das Booten über einen USB Stick, sollte der Server kein CD / DVD Laufwerk besitzen. Ich verwende hier die amd64 Version, die natürlich auch bei intel Prozessoren funktioniert und anzuwenden ist, wenn hier die 64bit Variante auf einem 64 bit Prozessor gewünscht ist. <br /><br /> Nachdem das ISO auf eine CD gebrannt ist, booten wir den Server von der Installations CD... <br /><br /> ==Installation== <div id="tutframe"><div id="framenum">1.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian01.jpg]] </div> Nach dem ersten Boot von der Netinstall CD erscheint als erstes das Startmenü des Installers. An der Stelle entscheiden wir, ob wir den grafischen Installer oder den Textinstaller wählen. Ich verwende hier den Textinstaller, da wir generell bei einer Serverinstallation auch später auf eine grafische Benutzeroberfläche verzichten möchten. Natürlich kann man auch einen Server mit einer grafischen Benutzeroberfläche aufsetzen. Allerdings gewöhnen wir uns lieber an die Shell, da man sich oft via ssh einloggen wird, um Wartungsaufgaben oder Installationen vorzunehmen.<br /><br /> Wählt also an dieser Stelle einfach den '''Install''' aus. Sollte es Probleme beim Booten geben, dann kann man mit der '''Advanced Options''' hier vielleicht etwas retten. Hierauf gehe ich aber in meinem Tutorial nicht näher ein. Ich setze voraus, dass der Bootvorgang erstmal sauber funktioniert. Drückt die Enter - Taste um den Installationsvorgang zu beginnen ... </div> <div id="tutframe"><div id="framenum">2.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian02.jpg]] </div> Im nächsten Frame ist die Sprache für den Installationsvorgang auszuwählen. Voreingestellt ist Englisch. Wer sattelfest ist, kann dies soweit voreingestellt lassen. Ich empfehle die Deutsche Sprache, damit während der Installation jeder Schritt auch klar nachvollziehbar ist und hier keine Fehler dadurch entstehen können, weil ein Vorgang nicht verstanden wurde.<br /><br /> An der Stelle dann die gewünschte Sprache auswählen und mit der '''Enter Taste''' übernehmen. </div> <div id="tutframe"><div id="framenum">3.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian03.jpg]] </div> Wählt hier Eure korrekte Zeitzone aus. Debian wird einen Wert vorschlagen, der aus Eurer Spracheinstellung resultiert.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">4.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian04.jpg]] </div> Ebenso stellt hier das Layout Eurer Tastatur ein. Auch hier hat Debian Deutsch als Standard aufgrund Eurer Spracheinstellung ausgewählt. Solltet Ihr aber dennoch eine andere Tastatur bevorzugen, dann ändert dies an dieser Stelle ab.<br /><br /> Die Einstellung dann mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">5.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian05.jpg]] </div> Debian läd nun einige zusätzliche Komponenten nach, bevor es mit der Installation weiter geht. </div> <div id="tutframe"><div id="framenum">6.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian06.jpg]] </div> Nun konfiguriert Debian das Netzwerk via DHCP. Solltet Ihr keinen DHCP Server verwenden, so wird der Vorgang fehlschlagen und Ihr müsst Eure Netzwerkkonfiguration an dieser Stelle manuell vornehmen. Dazu benötigt Ihr eine freie IP Adresse und müsst den Gateway in Eurem Netzwerk kennen, sowie die IP des Nameservers.<br /><br /> In der Regel klappt dies, wenn der DHCP aktiviert ist ohne Probleme. </div> <div id="tutframe"><div id="framenum">7.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian07.jpg]] </div> Vergebt an dieser Stelle einen eindeutigen Namen für Euren Rechner. Danach mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">8.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian08.jpg]] </div> Das gleiche dann mit einem Domainnamen. Wenn Ihr einen habt, dann gebt diesen an. Ansonsten genügt in einem lokalen Netz ein beliebiger Name Eures Netzes. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">9.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian09.jpg]] </div> Legt in diesem Frame Euer root Passwort fest. Sollte der Rechner online erreichbar sein, dann wählt ein besonders sicheres Passwort, das nicht so leicht zu erraten ist. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">10.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian10.jpg]] </div> Ein Sicherheitsprozess um sicher zu stellen, dass das root Passwort auch wie gewollt eingegeben ist. Wiederholt nochmals die Eingabe des Passworts. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">11.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian11.jpg]] </div> Wir legen nun einen ersten User an. Tragt dn Vor- und Zunamen ein. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">12.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian12.jpg]] </div> Der Name des Kontos resultiert aus dem Vornamen. Dieser kann natürlich auch geändert werden. Dieser Name wird dann auch als Verzeichnis unter '''/home''' angelegt. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">13.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian13.jpg]] </div> Legt dann das Passwort für den neuen User an. <br /><br /> Mit '''Weiter''' fortfahren. </div> <div id="tutframe"><div id="framenum">14.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian14.jpg]] </div> Auch hier muss das Passwort noch einmal bestätigt werden. </div> <div id="tutframe"><div id="framenum">15.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian15.jpg]] </div> Danach wird das Programm zur Partitionierung der Festplatte gestartet. Wir werden an dieser Stelle eine einfache Konfiguration mit 3 Partitionen vornehmen: <br /><br /> '''1. Partition: / (root)'''<br /> '''2. Partition: /home'''<br /> '''3. Partition: SWAP (Auslagerung)''' <br /> </div> <div id="tutframe"><div id="framenum">16.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian16.jpg]] </div> Die Partitionierung werden wir nun '''Manuell''' vornehmen. </div> <div id="tutframe"><div id="framenum">17.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian17.jpg]] </div> Meine Festplatte ist hier 21,5 GB groß (virtuelle Platte in meinem Fall). Wir wählen die gewünschte Festplatte aus. </div> <div id="tutframe"><div id="framenum">18.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian18.jpg]] </div> Da die Platte leer ist, muss eine neue Partitionstabelle erstellt werden. Deswegen wählen wir '''Ja''' aus. </div> <div id="tutframe"><div id="framenum">19.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian19.jpg]] </div> Der freie Speicher wird im nächsten Frame angezeigt. Diesen wählen wir aus und fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">20.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian20.jpg]] </div> Für '''/''' werden wir '''eine neue Partition erstellen'''. Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">21.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian21.jpg]] </div> Für '''/''' geben wir an der Stelle die gewünschte Größe auf der Festplatte an. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">22.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian22.jpg]] </div> Es wird eine primäre Partition erstellt. Wir können bis zu 3 primäre Partitionen anlegen. Sollten mehr Partitionen benötigt werden, so müssen wir später eine erweiterte Partition mit logische Partitionen festlegen. Wir können uns aber mit primären Partitionen begnügen. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">23.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian23.jpg]] </div> Die Partition wird an den Anfang gelegt. <br /><br /> Wir fahren mit '''Enter''' fort. </div> <div id="tutframe"><div id="framenum">24.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian24.jpg]] </div> Damit später auch gebootet werden kann, setzen wir für diese Partition den '''Boot-flag'''. Hierzu müssen wir das Setting für den Boot-flag von '''Aus''' auf '''Ein''' umstellen. <br /><br /> Mit '''Enter''' wird diese Einstellung umgestellt. </div> <div id="tutframe"><div id="framenum">25.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian25.jpg]] </div> Wir beenden die Konfiguration der ersten Partition und fahren mit der zweiten Partition fort. <br /><br /> Das Anlegen der Home und Swap Partition funktioniert im Grunde wie oben beschrieben, nur dass hier der Boot-flag nicht mehr aktiviert werden muss. </div> <div id="tutframe"><div id="framenum">26.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian31.jpg]] </div> Das Setting für meine Home Partition sieht dann wie folgt aus. </div> <div id="tutframe"><div id="framenum">27.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian36.jpg]] </div> Bei der 3. Partition, die ich als SWAP verwende, muss noch das Dateisystem geändert werden. Meine SWAP Partition ist ca. 1,5 GB groß. 2GB sind ein vernünftiger Wert, je nachdem wieviel RAM in Eurem Server verbaut sind. 4 GB SWAP können auch nicht schaden.<br /> Damit die Partition auch als Auslagerungsdatei verwendet wird, stellen wir das EXT3 Dateisystem auf SWAP um, indem wir '''Benutzen als''' mit '''Enter''' auswählen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">28.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian37.jpg]] </div> Jetzt stellen wir auf '''SWAP''' um. <br /><br /> Die Einstellung mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">29.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian38.jpg]] </div> Wir kontrollieren die Einstellunegn und beenden mit dem Menüpunkt '''Anlegen der Partition beenden'''. </div> <div id="tutframe"><div id="framenum">30.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian39.jpg]] </div> Das Ergebnis sollte dann so ähnlich aussehen. Es müssen mindestens zwei Partitionen vorhanden sein: Eine / und die Swap. Ihr könnt natürlich noch feiner aufteilen. Aber für das Erste sollte es so genügen. <br /><br /> Wir beenden die Partitionierung mittels '''Partitionierung beenden und Änderung übernehmen'''. </div> <div id="tutframe"><div id="framenum">31.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian40.jpg]] </div> Die Sicherheitsabfrage mit '''Ja''' bestätigen. An der Stelle wird dann die Festplatte partitioniert. Daten, die vorher eventuell vorhanden waren sind damit verloren. </div> <div id="tutframe"><div id="framenum">32.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian42.jpg]] </div> Nach der Partitionierung und Formatierung wird dann das Grundsystem installiert. </div> <div id="tutframe"><div id="framenum">33.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian43.jpg]] </div> Es muss noch der Paketmanager eingerichtet werden. Dazu wird ein Server eingetragen, der am besten aus Eurer Nähe kommt. Wählt deswegen das Land aus, indem Euer Server selbst steht. In unserem Fall vermutlich Deutschland. <br /><br /> Hier mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">34.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian44.jpg]] </div> Nun wählt einen Server aus. Auch hier gilt, je näher dran, desto schnelle möglicherweise die Verbindung dorthin. Manche User haben eh bevorzugte Server, die sie gerne verwenden. Es kann aber nur einer gewählt werden. <br /><br /> Mit '''Enter''' übernehmen. </div> <div id="tutframe"><div id="framenum">35.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian45.jpg]] </div> Solltet Ihr keinen Proxy verwenden, kann hier die Einstellung leer gelassen werden. <br /><br /> Mit '''Weiter''' übernehmen. </div> <div id="tutframe"><div id="framenum">36.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian46.jpg]] </div> Apt wird nun eingerichtet. </div> <div id="tutframe"><div id="framenum">37.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian48.jpg]] </div> Wer mag, der kann an dieser Stelle an der Paketverwendungserfassung teilnehmen. Muss man aber nicht unbedingt ... </div> <div id="tutframe"><div id="framenum">38.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian49.jpg]] </div> Nun wählen wir die gewünschten Softwarepakete aus. Uns genügen die Standard-Systemwerkzeuge. Wer mag, der kann auch den ssh-Server gleich voreinstellen, das lässt sich aber wie ich noch zeige schnell per Hand nachholen. <br /><br /> Wir fahren mit '''Weiter''' fort. </div> <div id="tutframe"><div id="framenum">39.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian50.jpg]] </div> Die Pakete werden nun installiert. Es hängt von der Geschwindigkeit der Internetverbindung ab, wie lange der Vorgang dauert. Da es sich aber nur im wenige Pakete handelt, geht das verhältnismäßig schnell. </div> <div id="tutframe"><div id="framenum">40.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian51.jpg]] </div> Zuletzt installieren wir den Bootloader in den Master Boot Record. Hier geht es mit '''Ja''' weiter. </div> <div id="tutframe"><div id="framenum">41.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian52.jpg]] </div> Geschafft. Der Server kann nun zum ersten Mal neu gebootet werden. Werft nachdem der Rechner heruntergefahren ist, die CD wieder aus. <br /><br /> Hier mit '''Weiter''' fortfahren. </div> <br /><br /> ==Der erste Start== <div id="tutframe"><div id="framenum">42.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian54.jpg]] </div> Wenn alles richtig gelaufen ist, dann seht Ihr den Bootloader Eueres neuen Systems. Lasst den ersten Wert voreingestellt und startet das System. <br /><br /> Hier mit '''Enter''' fortfahren. </div> <div id="tutframe"><div id="framenum">43.</div> <div style="float:right;padding-left:20px;"> [[Bild:Debian56.jpg]] </div> Wenn der Server durchgestartet ist, dann könnt Ihr Euch als root einloggen. </div> <br /><br /> Jetzt installieren wir noch unsere ersten wichtigen Pakete wie den ssh nach: <code><pre>apt-get install mc nano ssh htop</pre></code> Ihr könnt Euch nun mittels ssh auf Euren Server remote einloggen und weiter arbeiten. <br /><br /> ==Links== '''Debian:''' http://www.debian.org<br /> Pierre "Gargi" Kretschmer 8e71623ed272b151253da5be2dbc63f6200dbcc7 Debian Kernel kompilieren 0 93 980 475 2018-06-03T13:30:59Z Admin 1 wikitext text/x-wiki <div style="float:left;text-align:center;padding-right:20px"> [[Bild:kernel.png|Tux]] <br /> ''Tux''</div> <br /><br /> '''''Kernel Compile Quickdone auf einem Debian 6 Squeeze''''' <br /><br /> Dieses Beispiel basiert auf dem derzeit aktuellen Linux Kernel 3.6.3. Gegebenenfalls sind hier die Versionsnummern im Tutorial entsprechend anzupassen. <br /><br /><br /><br /> Folgende Pakete müssen installiert sein: <br /><br /> '''kernel-package'''<br /> '''libncurses5-dev'''<br /> '''build-essential'''<br /> '''wget''' <br /><br /> optional:''' mc''' <code><pre> apt-get install kernel-package libncurses5-dev build-essential mc wget</pre></code> Jetzt beginnen wir mit dem Kernelcompile, indem wir die Sourcen herunterladen, entpacken, konfigurieren und kompilieren: <code><pre> cd /usr/src rm linux wget ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.6.3.tar.bz2 tar xvfj linux-3.6.3.tar.bz2 ln -s linux-3.6.3 linux cd linux make proper make oldconfig</pre></code> Sollten spezielle Anpassungen gemacht werden: <code><pre> make menuconfig</pre></code> Dann weiter mit dem Compile: <code><pre> make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> Wenn Ihr screen und einen Dualcore Prozessor einbinden wollt, dann lautet der Befehl <code><pre> CONCURRENCY_LEVEL=5 screen make-kpkg --initrd kernel_image --revision KernelRebuild.01</pre></code> ( statt der 5 bei einem Quadcore dann die 9. Also 2x Kerne + 1) <code><pre> cd /usr/src</pre></code> Hier bitte das entsprechende Paket einsetzen (z.B.): <code><pre> dpkg -i kernel-image-3.6.3_KernelRebuild.01_i386.deb</pre></code> Rechner neu starten. <br /><br /> cu<br /> Pierre "Gargi" Kretschmer <br /> <br /> '''Kernel:''' http://www.kernel.org<br /> '''Debian:''' http://www.debian.org <br /> 6a65123adf0620e8af8d2a779c31a467f243e4e2 Debian 6 und 7 auf der NSLU2 0 222 981 914 2018-06-03T13:31:29Z Admin 1 /* Debian konfigurieren und aktualisieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 oder auch Debian 7 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sde2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="sda2..."</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! 6c5ca5227157841095ccc5bebbbe255f3be36dd2 1008 981 2018-06-30T08:52:28Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:schnegge2_nslu2.png|Debbislug6]] <br /> ''Schnegge still alive''</div> Wer glaubt, dass mit dem Debian 5 das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht.<br/><br/> Allerdings wird es schwieriger, die NSLU2 mit einer aktuellen UNSLUNG Version zu versorgen, so wird wohl mehr und mehr Debian das bevorzugte OS auf der NSLU2 bleiben. Das zumindest für mich. Ich selbst hatte gedacht, dass mit Debian 5 auch der Support für die NSLU2 seitens der Community eingestellt wird, aber auch hier habe ich mich Gott sei Dank getäuscht. Ein User aus meinem Forum hat hierbei bemerkt, dass es auch für Debian 6 oder auch Debian 7 weiterhin die Möglichkeit gibt, die Schnecke mit einem Debian Linux zu versorgen. Eine grundlegende englische Anleitung findet Ihr unter folgender URL: http://www.cyrius.com/debian/nslu2/unpack.html<br/><br/> Stefan aus meinem Forum hat sich dann daran gesetzt, ein deutsches Tutorial zu verfassen, was wir dann zusammen ausgebaut haben. Diese umfassende deutsche Anleitung stelle ich hier nun auf MYSLUG in meine Tutorial Sammlung. An dieser Stelle auch noch einen herzlichen Dank an Stefan für seine prima Arbeit!<br/><br/> '''Wichtige Links'''<br/> '''''DEBIAN:''''' http://www.debian.org<br/> '''''CYRIUS TUTORIAL:''''' http://www.cyrius.com/debian/nslu2/unpack.html<br/> '''''GARGI.ORG TUTORIAL:''''' http://www.gargi.org/showthread.php?4124-Debian-6-Squeeze-auf-einer-NSLU2-installieren <br/><br/> '''HINWEIS:''' Bitte achtet wie immer darauf, dass Ihr Euch beim Eingeben der folgenden Befehle nicht vertippt. Die NSLU2 wird in dem Tutorial geflasht. Hierbei übernehme ich keine Haftung für Schäden, die eventuell an der Hardware passieren können. Während des Flashvorgangs darf die Stromzufuhr oder die Netzwerkverbindung nicht unterbrochen werden. Wartet hier immer ab, bis der jeweilige Arbeitsschritt beendet ist. Nicht alle USB Sticks oder USB Festplatten sind für die NSLU2 geeignet. Eine Kompatibilitätsliste kann ich hierbei nicht zur Verfügung stellen und gebe auch keine Kaufempfehlung ab. Nehmt Euch für das Tutorial Ruhe und Zeit. Der Hersteller wird hierfür keinen Support geben.<br/><br/> ==Stick/HDD erstellen== Festplatte mittels fdisk (distributionsübergreifend) einrichten: An der Konsole könnt Ihr auf allen Linuxdistributionen via '''fdisk''' Eure Platte partitionieren. Steckt dazu Eure Festplatte an einen USB Port Eures Linuxrechners und stellt fest, welches Device die Platte ist. Dann sehen wir uns erstmal die Platte mittels folgendem Befehl an: <code><pre>#fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System</pre></code> Wir haben hier eine 60GB Platte in unserem Beispiel. Die werden wir wie folgt einrichten:<br/><br/> '''1GB''' für Swap (Auslagerungspartition)<br/> '''20GB''' für /<br/> '''~40GB''' (den Rest) für /home<br/> <br/> Dazu starten wir den fdisk und geben ein '''n''' für eine neue Partition ein: <code><pre># fdisk /dev/sde Welcome to fdisk (util-linux 2.21.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Befehl (m für Hilfe): n</pre></code> Danach ein '''p''' für eine primäre Partition: <code><pre>Partition type: p primary (0 primary, 0 extended, 4 free) e Erweiterte Select (default p):p</pre></code> Übernehmt die '''1''' für die erste Partition: <code><pre>Partitionsnummer (1-4, Vorgabe: 1): 1</pre></code> Den nächsten Wert nur mit Enter übernehmen: <code><pre>Erster Sektor (2048-117210239, Vorgabe: 2048):</pre></code> Danach legen wir 1GB an. Diese wird unsere Swap Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2048-117210239, Vorgabe: 117210239): +1G</pre></code> Perfekt, die korrekte Größe ist gesetzt: <code><pre>Partition 1 of type Linux and of size 1 GiB is set</pre></code> Dann die nächste Partition mit den gleichen Schritten wie oben anlegen. Root Partition: <code><pre>Last Sektor, +Sektoren or +size{K,M,G} (2099200-117210239, Vorgabe: 117210239): +20G Partition 2 of type Linux and of size 20 GiB is set</pre></code> Bei der letzten Partition für Home dann einfach den Rest in meinem Beispiel übernehmen. Danach geben wir '''t''' ein, damit wir die Disk ID der ersten Partition verändern. Diese muss als eine SWAP Partition eingerichtet werden. Dazu '''t''' auswählen: <code><pre>Benutze den Standardwert 117210239 Partition 3 of type Linux and of size 34,9 GiB is set Befehl (m für Hilfe): t</pre></code> Hier die erste Partition mit '''1''' auswählen und die Disk ID auf '''82''' setzen. Dann '''a''' auswählen und die 2. Partition. Das setzt hier den Bootflagg.<br/> Danach übernehmen wir alle Änderungen mit '''w'''. <br/><br/> Wir sehen uns das Ergebnis erstmal an: <code><pre># fdisk -l /dev/sde Disk /dev/sde: 60.0 GB, 60011642880 bytes 64 Köpfe, 32 Sektoren/Spur, 57231 Zylinder, zusammen 117210240 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1e585210 Gerät boot. Anfang Ende Blöcke Id System /dev/sde1 2048 2099199 1048576 82 Linux Swap / Solaris /dev/sde2 * 2099200 44042239 20971520 83 Linux /dev/sde3 44042240 117210239 36584000 83 Linux</pre></code> Mit folgendem Befehl bereiten wir die '''SWAP''' dann vor: <code><pre>#mkswap /dev/sde1 Swapbereich Version 1 wird angelegt, Größe = 1048572 KiB kein Label, UUID=8ddf3269-9c3c-4229-9847-587ef1d36a1d</pre></code> Die restlichen beiden Partitionen formatieren wir mit dem Ext3 Dateisystem: <code><pre>mke2fs /dev/sde2 tune2fs -O has_journal -o journal_data /dev/sde2 tune2fs -O dir_index /dev/sde2</pre></code> Ein kurzer Check: <code><pre>e2fsck -D -f /dev/sde2</pre></code> Da wir mit Ext3 ein journaling system verwenden deaktivieren wir boot time checks: <code><pre>tune2fs -c 0 -i 0 /dev/sde2</pre></code> Das bitte dann auch für Eure /dev/sde3 durchführen. Danach fahren wir wie folgt durch: <br/><br/> Wir mounten die Platte, wechseln auf die root Partition und holen uns das Image für die Debian Platte und entpacken die Debiandateien auf die Platte: <code><pre># sudo su # mount /dev/sde2 /mnt # mkdir /mnt/boot # cd /mnt </pre></code> Debian 6 Squeeze downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/squeeze/base.tar.bz2 </pre></code> '''ODER''' Debian 7 Wheezy downloaden: <code><pre> # wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2 </pre></code> Danach das Image entpacken: <code><pre> # tar -xjvf base.tar.bz2</pre></code> Jetzt die FSTAB auf Eure Partitionen einstellen: <code><pre># nano /mnt/etc/fstab</pre></code> (in unserem Beispiel sieht diese wie folgt aus, ggf anpassen!): <code><pre># /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 none swap sw 0 0 /dev/sda2 / ext3 errors=remount-ro 0 1 /dev/sda3 /home ext3 defaults 0 2</pre></code> Gegebenfalls die resolf.conf ändern: <code><pre># nano /mnt/etc/resolv.conf</pre></code> Hier könnt Ihr die Netzwerkadresse bereits an der Stelle von einer dynamischen IP auf eine feste umstellen. Andernfalls wird sich via DHCP die Adresse automatisch gezogen: <code><pre># nano /mnt/etc/network/interfaces</pre></code> Beispiel:<br/> '''iface eth0 inet static'''<br/> '''address 192.168.0.4'''<br/> '''netmask 255.255.255.0'''<br/> '''broadcast 192.168.0.255'''<br/> '''gateway 192.168.0.1'''<br/> <br/> Jetzt hängen wir die Platte wieder sauber aus: <code><pre># cd / # umount /mnt</pre></code> <br/><br/> ==Upslug2 installieren und Image flashen== Unter den Linuxdistributionen kann man sich das Programm Upslug2 recht schnell selbst kompilieren. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre> svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre> cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre> autoreconf -i ./configure make</pre></code> <div style="float:right;text-align:center;padding-left:20px"> [[Bild:flashen.jpg|Debbislug6_1]] <br /> ''Zum Flashen muss sie nicht geöffnet werden...''</div> <br />Jetzt liegt das Programm '''upslug2''' im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. <br /><br /><br /> Nun stellt Euer Netzwerk auf folgende IP um: <br /><br /><br /> '''''192.168.0.xxx''''' <br /><br /> D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. <br /><br /><br /> Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. <br /><br /> Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre> su</pre></code> ''[PASSWORT EINGEBEN]''<br /><br /> Wechselt mit '''cd''' in Euer upslug Verzeichnis und holt Euch das Image zum Flashen: Debian 6 Squeeze: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-2.6.32-5</pre></code> '''ODER''' Debian 7 Wheezy: <code><pre>wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4</pre></code> Nun startet das '''upslug2''' Programm aus Eurem Buildverzeichnis heraus für Debian 6 mit folgendem Befehl: <code><pre> ./upslug2 --image="sda2-2.6.32-5"</pre></code> Für '''Debian 7''': <code><pre> ./upslug2 --image="sda2-3.2.0-4"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre> ./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="sda2..."</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet <br /><br /> Nach dem Flashen startet die Slug wieder neu. Steckt dabei Eure vorbereitete Festplatte an den Anschluss Disk 1 an und lasst das Gerät durchbooten. Es ist durchaus möglich, dass der erste Bootvorgang länger dauert, weil möglicherweise ein Plattencheck durchgeführt wird. Dies kann unter Umständen mehrere Minuten dauern. Euren Linux Rechner, von dem Ihr aus geflasht habt müsst Ihr dann wieder für Euer Netzwerk entsprechend umstellen. <br /><br /> ==Debian konfigurieren und aktualisieren== Soweit so gut. Wir können jetzt direkt per '''SSH''' auf die NSLU2 (im Router nach IP sehen, falls nicht fest vergeben) ab hier kann auch wieder mit Windows und z.B. Putty gearbeitet werden. <code><pre># ssh root@IP_DER_NSLU2</pre></code> Passwort ist '''root'''<br /> Root-Passwort ändern <code><pre> # passwd</pre></code> Erste wichtige Tools installieren: <code><pre> apt-get install mc nano htop</pre></code> Weitere Benutzer anlegen, falls gewünscht <code><pre> # adduser USERNAME</pre></code> Eigene SSH-Schlüssel erstellen <code><pre> # rm /etc/ssh/ssh_host* # dpkg-reconfigure openssh-server</pre></code> "uk" änderen wir nach "de" ab <code><pre> # nano /etc/apt/sources.list</pre></code> Zeit einstellen "lassen" <code><pre> # ntpdate pool.ntp.org</pre></code> System auf aktuellen Stand bringen <code><pre> # apt-get update # apt-get dist-upgrade</pre></code> Zeitzone einstellen <code><pre> # dpkg-reconfigure tzdata</pre></code> Deutsche Sprache einstellen (UTF-8) <code><pre> # dpkg-reconfigure locales</pre></code> Die zwei untersten Zeilen auskommentieren, damit der User Root auch alles deutsch angezeigt bekommt <code><pre> # nano /root/.profile</pre></code> Einstellungen nach Eurem Gusto <code><pre> # nano /etc/hostname # nano /etc/hosts</pre></code> Ich installiere noch psmisc, da sonst mein geliebter killall-Befehl nicht funktioniert: <code><pre> # apt-get install psmisc</pre></code> Das war es dann. Jetzt ein letzter Reboot: <code><pre> # reboot</pre></code> <br /><br /> Viel Spaß!<br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> Vielen Dank an der Stelle nochmal an Stefan für seine Mitarbeit! [[Kategorie:NSLU2]] a2bd6ae58fd04373c6409edbfcf2378a8f1d1a15 Impressum 0 5 982 952 2018-06-06T22:17:38Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] <br> In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: '''Beiträge auf dieser Website können eingebettete Inhalte beinhalten (z. B. Videos, Bilder, Beiträge etc.). Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 6b0f0e700410b7f2092b2591f04983ac9d1203d5 983 982 2018-06-08T23:42:39Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] <br> In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen fremden Plugins oder Skins/Templates. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. b3207d20d5a523e1beb06573237d6a1f92b7e951 984 983 2018-06-27T20:02:42Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] <br> In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: [https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC] '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 829fbd1ed192f5909fb3f677047251e3fc9de886 985 984 2018-06-27T20:03:06Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ] <br> In der hier verwendeten aktuellen Version 1.30 der Mediawiki wird beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Es werden hier keine weitere persönliche Daten hinterlegt.<br> Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen dieses Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 00d20a4bd0bb2f9ee64173927a74fe9e420364ed Firewalling: iptables und Fail2Ban 0 102 986 890 2018-06-29T18:09:19Z Admin 1 /* fail2ban auf Debian Squeeze installieren und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren fügt im jeweiligen Bereich Folgendes ein <code><pre>enabled = true</pre></code> Alternativ gibt es im Unterverzeichnis jail.d die Datei debian_default.conf. Dort schreibt zum Aktivieren einzelner zu überwachende Dienste den Dienstnamen in eckige Klammern und den enable Befehl: <code><pre>[proftpd] enabled = true </pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Nein'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer <metakeywords>Firewall,fail2ban,Debian,Linux,startscript</metakeywords> 0313c52571bb325386ba2c0199a410c3ba983eeb 987 986 2018-06-29T18:09:50Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren fügt im jeweiligen Bereich Folgendes ein: <code><pre>enabled = true</pre></code> Alternativ gibt es im Unterverzeichnis jail.d die Datei debian_default.conf. Dort schreibt zum Aktivieren einzelner zu überwachende Dienste den Dienstnamen in eckige Klammern und den enable Befehl: <code><pre>[proftpd] enabled = true </pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Nein'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer 6cf43c0f49b368abbbfaeeec815db44d3d3e8d61 988 987 2018-06-29T18:10:09Z Admin 1 /* fail2ban auf Debian Squeeze installieren und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Squeeze installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren fügt im jeweiligen Bereich Folgendes ein: <code><pre>enabled = true</pre></code> Alternativ gibt es im Unterverzeichnis '''jail.d''' die Datei '''debian_default.conf'''. Dort schreibt zum Aktivieren einzelner zu überwachende Dienste den Dienstnamen in eckige Klammern und den enable Befehl: <code><pre>[proftpd] enabled = true </pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Nein'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer 5eeb90854f1a76614c0e62ca1a163857c035d499 989 988 2018-06-29T18:11:54Z Admin 1 /* fail2ban auf Debian Squeeze installieren und konfigurieren */ wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==fail2ban auf Debian Stretch installieren und konfigurieren== Um Bruteforce Attacken auf ssh oder ftp Servern Paroli zu bieten, empfiehlt sich unter anderem der Einsatz von [http://www.fail2ban.org fail2ban]. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.<br> <br> <br> <br> Ihr installiert fail2ban über<br> <code><pre>apt-get install fail2ban</pre></code> Zudem falls noch nicht geschehen das Paket whois: <code><pre>apt-get install whois</pre></code> Als nächstes kopiert die Konfigurationsdatei '''jail.conf''' nach '''jail.local''' <code><pre>cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre></code> Danach kann die Datei '''jail.local''' editiert und auf die eigenen Bedürfnisse angepasst werden. Per default ist nur der ssh "scharf" geschaltet. <code><pre>nano /etc/fail2ban/jail.local</pre></code> Wenn Ihr Euch die Datei anseht, stehen bereits schon entsprechende Sections wie der proftp zur Verfügung. Um eine bestimmte Section zu aktivieren fügt im jeweiligen Bereich Folgendes ein: <code><pre>enabled = true</pre></code> Alternativ gibt es im Unterverzeichnis '''jail.d''' die Datei '''debian_default.conf'''. Dort schreibt zum Aktivieren einzelner zu überwachende Dienste den Dienstnamen in eckige Klammern und den enable Befehl: <code><pre>[proftpd] enabled = true </pre></code> Die Standart '''bantime''' (= die Zeit, die eine IP gesperrt ist) steht auf 600 Sekunden = 10 Minuten. Sollte ein besonderer Dienst länger gesperrt werden, schreibt in die Section <code><pre>bantime = XYZ</pre></code> '''XYZ''' in Sekunden<br> <br> Der Wert maxretry gibt an, ab wieviel Fehlversuche gesperrt wird. 5 bis 6 Fehlversuche gehen in der Regel in Ordnung.<br> <br> Nach jeder Änderung muss fail2ban neu gestartet werden: <code><pre>/etc/init.d/fail2ban restart</pre></code> Achso: Der Wert '''ignoreip''' ist auch wichtig. Gebt hier die IP Eures Rechners ein, der keinesfalls gesperrt werden soll. Nichts schlimmeres, als wenn Eure eigene Maschine nicht mehr ran kann ;-)<br> <br> Wer zudem sich den Luxus gönnen möchte, dass man per Mail verständigt wird, sobald ein Einbruchsversuch geblockt wurde, kann dies natürlich auch einrichten. Gebt dazu den Parameter '''destemail''' in der '''jail.local''' an: <code><pre>destemail = meine@email.adresse</pre></code> Als Standard MTA ist sendmail angegeben. Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Dieser funktioniert als Ersatz auch und es muss hier in der jail.local nichts umgebogen werden.<br> <br> Solltet Ihr eigentlich keinen Webserver aktiviert haben, könnt Ihr aber dennoch den exim dazu verwenden, via eines sogenannten '''Smarthosts''' (= externer Mailserver) Eure fail2ban Mail verschicken zu lassen.<br> <br> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre>dpkg-reconfigure exim4-config</pre></code> <br> ''Folgende Konfigurationsschritte:''<br> 1.) Versand über Sendezentrale (Smarthost); '''Empfang mit SMTP oder Fetchmail'''<br> <br> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen'''<br> <br> 3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1'''<br> <br> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: '''Auch hier den default Domän Namen stehen lassen'''<br> <br> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.'''<br> <br> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja'''<br> <br> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)'''<br> <br> 9.) DNS Anfrage minimieren: '''Nein'''<br> <br> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/'''<br> <br> 11.) Einstellungen auf kleine Dateien aufteilen: '''Nein'''<br> <br> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client'''<br> <br> Hier das Passwort wie folgt hinterlegen: <code><pre>IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein.<br> <br> Startet danach den MTA neu: <code><pre>/etc/init.d/exim4 restart</pre></code> Jetzt könnt Ihr auch Mails verschicken. <br> Danach geben wir noch in der '''/etc/fail2ban/jail.local''' an, dass auch E-Mails verschickt werden sollen. Ändert hierfür die Zeile <code><pre>action = %(action_)s</pre></code> in <code><pre>action = %(action_mwl)s</pre></code> Jetzt den fail2ban neu starten: <code><pre>/etc/init.d/fail2ban restart</pre></code> Nun sollte es nicht mehr lange dauern, bis Ihr eine Mail bekommt.<br> <br> Die Logfile könnt Ihr an der Konsole mit einem<br> <code><pre>tail -f /var/log/fail2ban.log</pre></code> überwachen.<br> <br> Damit ist ein Geschützturm für Euren Server aufgestellt. <br> <br> ==Firewall Script mit iptables== Parallel zur Fail2Ban Installation macht es Sinn, noch seinen Server über ein Firewall Script abzudichten. Hierbei soll das Script folgendes machen:<br> <br> a) Spezielle IP Nummern sperren (Blacklisting)<br> b) Alle Ports dicht machen<br> c) Spezielle Ports öffnen<br> <br> Zuerst legen wir unsere Blacklistdatei an:<br> <code><pre>touch /usr/local/etc/blacklist.txt</pre></code> Solltet Ihr bereits IP Nummern haben, denen Ihr generell den Zugriff verwehren wollt, dann schreibt diese in die Blacklist Datei einfach untereinander rein.<br> <br> Zu einer Blacklist gehört natürlich auch eine Whitelist:<br> <code><pre>touch /usr/local/etc/whitelist.txt</pre></code> Hier kommen die IP Nummern rein, die nicht geblockt werden sollen, also immer Zugriff haben werden.<br> <br> Dann legen wir unter '''/etc/init.d/''' unser Firewallscript an:<br> <code><pre>touch /etc/init.d/firewall</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /etc/init.d/firewall</pre></code> Wir editieren nun das Skript mit <code><pre>nano /etc/init.d/firewall</pre></code> und füllen die Datei mit folgenden Inhalt: <code><pre> #!/bin/sh ### BEGIN INIT INFO # Provides: custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall initscript # Description: Custom Firewall, placed in /etc/init.d. # script written by Gargi 2009 http://www.gargi.org ### END INIT INFO #needed modules modprobe ip_conntrack_ftp BLACKLIST=/usr/local/etc/blacklist.txt WHITELIST=/usr/local/etc/whitelist.txt #PORTDESCRIPTION #21:FTP 22:SSH 25:SMTP 53:DNS 80:HTTP 443:HTTPS 123:NTP #trigger for your ports IN_ALLOWED_TCP="21 22 25 53 80 443" OUT_ALLOWED_TCP="21 22 25 53 80 443" IN_ALLOWED_UDP="53 123" OUT_ALLOWED_UDP="53 123" IN_ALLOWED_ICMP=" " OUT_ALLOWED_IMCP=" " case "$1" in start) # Stopping IP trap /etc/init.d/fail2ban stop echo "Stopping fail2ban IP trap ..." # Clear iptables iptables -F #Defaults iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # loopback communication iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # persist on connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ban blacklisted IPs for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do echo "Blocking $x..." iptables -A INPUT -t filter -s $x -j DROP done # Allow whitelisted IPs for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do echo "Allowing $x..." iptables -A INPUT -t filter -s $x -j ACCEPT done # TCP rules in for port in $IN_ALLOWED_TCP; do echo "Accepting TCP port $port" iptables -A INPUT -t filter -p tcp --dport $port -j ACCEPT done # TCP rules out for port in $OUT_ALLOWED_TCP; do echo "Allowing sending over TCP port $port" iptables -A OUTPUT -t filter -p tcp --dport $port -j ACCEPT done # UDP rules in for port in $IN_ALLOWED_UDP; do echo "Accepting UDP port $port" iptables -A INPUT -t filter -p udp --dport $port -j ACCEPT done # UDP rules out for port in $OUT_ALLOWED_UDP; do echo "Allowing sending over UDP port $port" iptables -A OUTPUT -t filter -p udp --dport $port -j ACCEPT done # ICMP rules in for port in $IN_ALLOWED_ICMP; do echo "Accepting ICMP port $port" iptables -A INPUT -t filter -p icmp --dport $port -j ACCEPT done # ICMP rules out for port in $OUT_ALLOWED_ICMP; do echo "Allowing sending over ICMP port $port" iptables -A OUTPUT -t filter -p icmp --dport $port -j ACCEPT done # Dropping startup requests iptables -A INPUT -t filter -p tcp --syn -j DROP # Restarting IP trap /etc/init.d/fail2ban start echo "Fire up IP trap again ..." ;; stop) /etc/init.d/fail2ban stop iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT echo "Warning! Firewall is stopped, server is unprotected now!" ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac </pre></code> Ihr seht, dass Ihr oben einfach die gewünschten Ports für TCP / UDP In- und Outgoing eintragen könnt wie Ihr sie benötigt. Mit obigen Ports funktioniert FTP, DNS, SSH und HTTP. Jetzt müssen wir nur noch Debian beibringen, dass das Script in den Runlevels aktiviert ist: <code><pre>cd /etc/init.d update-rc.d firewall defaults</pre></code> Danach startet das Script bei jedem Serverstart automatisch. Wenn Ihr neue Ports einfügt, dann müsst Ihr nicht jedes Mal den Server neu starten, sondern es genügt ein: <code><pre>/etc/init.d/firewall restart</pre></code> Hierbei wird zudem jedes Mal auch der Fail2ban neu gestartet. Um zu sehen, welche Regeln vorliegen ruft einfach <code><pre>iptables -L -v</pre></code> auf.<br> <br> [[Bild:firewall.jpg|Firewall beim Start]]<br> ''Gargi's Skript beim Systemstart''<br><br> ==Portforwarding== Wenn von außen ein anderer Port als der Dienst es standardmäßig vorsieht, der Server aber den Port unbeding behalten muss, dann kann man auch recht einfach auf der gleichen Maschine ein Portforwarding mittels den iptables einrichten. Wir möchten beispielsweise den Port 180 auf den HTTP Port 80 legen, sodass beispielsweise am Router der Port 180 freigegeben werden kann und dieser dann auf den Server auf Port 80 geschoben wird. Fügt in das Script dann folgende Zeile ein: <code><pre>iptables -t nat -A PREROUTING -p tcp --dport 180 -j REDIRECT --to-ports 80</pre></code> <br><br> ==Port für spezielle Hardware MAC freigeben== Möchtet Ihr, dass nur spezielle Rechner Zugriff auf einen Port haben sollen, dann kann das in den Sript auch einfach integriert werden. Wir wollen, dass zwei Rechner im Netz auf ssh Zugriff haben, sonst niemand. Schreibt dazu oben in das Script folgende Variable, in der Ihr dann alle MAC Adressen erfasst: <code><pre>MAC_SSH="12:12:12:EE:EE:EE 23:23:23:23:CC:CC"</pre></code> (die MACs natürlich entsprechend ändern) <br /><br /> In das Script weiter unten dann die Schleifen zusätzlich einbauen: <code><pre> # TCP rules in by MAC for mac in $MAC_SSH; do echo "Accepting device $mac on ssh" iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source $mac -j ACCEPT done</pre></code> Startet danach Eure Firewall neu. <br><br> ==Fail2ban : wie man einen Ban aufhebt== Wenn Ihr Euch ausgesperrt habt und Ihr möchtet den Ban aufheben, dann geht wie folgt vor. Z.B. ist beim Einloggen in den FTP der Ban passiert. Lasst Euch dann die '''IPTABLES''' anzeigen: <code><pre> iptables -L</pre></code> Jetzt sucht den Bereich, wo Eure IP auftaucht. Z.B.: <code><pre> Chain fail2ban-proftpd (1 references) target prot opt source destination DROP all -- 192.168.1.2 anywhere RETURN all -- anywhere anywhere</pre></code> Das erste, was gedroppt wird ist dann die gesuchte IP Nummer. Diese steht sozusagen in der ersten Drop Zeile des Abschnittes. Es könnten da theoretisch mehr IPs stehen, dann zählt die entsprechende Zeile ab. In unserem Beispiel ist es die Zeile 1. <br><br> Dann gebt folgendes ein: <code><pre> iptables -D fail2ban-proftpd 1</pre></code> Die 1 am Ende bedeutet eben die IP in der ersten Dropzeile. Jetzt solltet Ihr wieder zugreifen können. <br><br> Bei einem Restart des fail2ban kann es aber bei manchen Jail-Arten sein, dass eine IP wieder auf die Banliste gelangt, wenn eine entsprechende log Datei eingelesen wird. Hier muss dann die betroffene Log-Datei bearbeitet werden. <br><br> ==Version 0.8.6 : htaccess Fehlversuche werden nicht gebannt== Falls Fehlversuche auf einen htaccess (Apache Webserver) nicht gebannt werden, kann es sein, dass die '''apache-auth.conf''' bearbeitet werden muss: <code><pre>nano /etc/fail2ban/filter.d/apache-auth.conf</pre></code> Kommentiert die folgende Zeile aus:<br><br> '''failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> in<br><br> '''# failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$'''<br><br> Setzt dafür folgende Zeilen darunter ein: <code><pre>failregex = ^%(_apache_error_client)s user .* authentication failure for "\S*": Password Mismatch$ ^%(_apache_error_client)s user .* not found: \S*\s*$</pre></code> Speichert die Änderung ab und startet den '''fail2ban''' neu durch. <br><br> ==fail2ban versendet Mails mit Datum 1.1.1970== Falls fail2ban anfängt, Mails mit dem Datum 1.1.1970 zu verschicken, dann könnt Ihr den Fehler wie folgt beheben: Editiert die '''/etc/init.d/fail2ban''' und fügt als erstes nach dem Info Bereich folgende Zeile ein: <code><pre>export LC_TIME=C</pre></code> Startet danach den fail2ban neu: <code><pre>/etc/init.d/fail2ban restart</pre></code> Oder mit dem kompletten Firewallscript <code><pre>/etc/init.d/firewall restart</pre></code> Die Stopp Meldungen kommen noch mit dem falschen Datum, die Startmeldung wieder mit dem korrekten. <br><br> Viele Grüße!<br> Pierre "Gargi" Kretschmer f8ac14122fc5bf0530a63f91e334336632d865ae MediaWiki:Sidebar 8 3 990 942 2018-06-29T18:23:29Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org|Gargi.org ** Impressum|Impressum und Datenschutz * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * Raspberry Pi 3 ** Diskussionslink Kernel 4.14 * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES 4cfa055af10d6ef80a5c8a3733d39cbf679f02a5 991 990 2018-06-29T18:23:45Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org|Gargi.org ** Impressum|Impressum und Datenschutz * Raspberry Pi 2 ** Raspberry Pi 2 Model B: Blick auf die Platine | Raspberry Pi 2 Model B: Blick auf die Platine ** Raspbian auf dem Raspberry Pi 2 installieren | Raspbian auf dem Raspberry Pi 2 installieren ** Ipv6 aktivieren | Ipv6 aktivieren ** Zusätzliche Festplatte und Spindown | Zusätzliche Festplatte und Spindown ** Automatische Updates | Automatische Updates ** Serverstatus zumailen | Serverstatus zumailen ** Owncloud installieren | Owncloud installieren ** Mediaserver mittels miniDLNA | Mediaserver mittels miniDLNA ** Der dedizierte Quake3 Server | Der dedizierte Quake3 Server * Raspberry Pi 3 ** Diskussionslink Kernel 4.14 | Diskussionslink Kernel 4.14 * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES e20e3b71a49a2e5faaad2b5b81101031eab32b51 Diskussionslink Kernel 4.14 0 277 992 2018-06-29T18:24:15Z Admin 1 Die Seite wurde neu angelegt: „Die aktuelle Diskussion zum Kernel 4.14 findet sich hier: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=197689“ wikitext text/x-wiki Die aktuelle Diskussion zum Kernel 4.14 findet sich hier: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=197689 ec586978331634b12e366856787991107714e7e2 Kategorie:NSLU2 14 278 994 2018-06-30T08:46:05Z Admin 1 Die Seite wurde neu angelegt: „Die NSLU2 wurde von 2004 bis 2008 produziert und erfreute sich großer Beliebtheit bei Bastlern. Hier findet Ihr meine Tutorials zur NSLU2. Diese pflege ich al…“ wikitext text/x-wiki Die NSLU2 wurde von 2004 bis 2008 produziert und erfreute sich großer Beliebtheit bei Bastlern. Hier findet Ihr meine Tutorials zur NSLU2. Diese pflege ich allerdings seit einiger Zeit nicht mehr, da ich alle meine Geräte mittlerweile durch den Raspberry Pi ersetzt habe. 6a6affde653b4d7a50c4b37fab1c00fbbc04837c 995 994 2018-06-30T08:46:49Z Admin 1 wikitext text/x-wiki Die NSLU2 wurde von 2004 bis 2008 produziert und erfreute sich großer Beliebtheit bei Bastlern. Hier findet Ihr meine Tutorials zur NSLU2. Diese pflege ich allerdings seit einiger Zeit nicht mehr, da ich alle meine Geräte mittlerweile durch den Raspberry Pi ersetzt habe. [[Bild:nslu2_1.jpg|NSLU2]] 8ae15db650b088055a04e5b7a20c36e5b8c9c9a3 996 995 2018-06-30T08:47:03Z Admin 1 wikitext text/x-wiki Die NSLU2 wurde von 2004 bis 2008 produziert und erfreute sich großer Beliebtheit bei Bastlern. Hier findet Ihr meine Tutorials zur NSLU2. Diese pflege ich allerdings seit einiger Zeit nicht mehr, da ich alle meine Geräte mittlerweile durch den Raspberry Pi ersetzt habe. [[Bild:nslu2_1.jpg|NSLU2]] 7afd1a20ff3b02e717609676c25d61cbefac07d2 Slug als Webserver 0 4 997 333 2018-06-30T08:47:51Z Admin 1 wikitext text/x-wiki '''Achtung neu:''' Ich habe ein Forum für Eure Fragen zur NSLU2 / SLUG eingerichtet. Die Mailingliste ist zugunsten des Forums aufgelöst. Ihr findet das Forum unter http://www.gargi.org oder über die Sidebar unter community/kontact (Browsercache leeren, falls der Menüpunkt nicht zu sehen ist).<br /> '''Hinweis:''' Bitte verwendet einen aktuellen Browser. Mit Browsern in einer älteren Version werden oftmals Teile der Textformatierung nicht korrekt angezeigt. <br /> <br /> <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Was ist eine NSLU2?== ... zumindest dachte ich mir das, als ich zum ersten Mal davon hörte. NSL steht als Abkürzung für '''N'''etwork '''S'''torage '''L'''ink. Das '''U''' selbst kann Unit oder auch USB bedeuten. Dieses spezielle Gerät, das hier auf dieser Seite etwas näher besprochen wird, wird von der Firma Linksys http://www.linksys.com vertrieben.<br /> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div> Derartige Geräte werden vom Grund her als Server für Datenspeicher innerhalb eines Netzwerkes verwendet. D.h. an einer NSL-Box wird ein Datenträger angeschlossen, z.B. eine externe USB-Festplatte oder ein Flashspeicher, der für alle Geräte innerhalb eines Netzwerkes zur Verfügung steht, je nachdem der Zugriff auf den Datenspeicher geregelt ist. Vielerorts werden für solche einfachen Aufgaben ganze Rechner in einem Netzwerk abgestellt. Der Vorteil solcher Lösungen liegt klar auf der Hand: Sie sind einfach zu konfigurieren, nehmen weniger Platz als ein kompletter Rechner ein, verbrauchen weniger Strom als ein "echter" Server und sind natürlich kostengünstig. Derzeit kostet ein neues NSLU2 um die 80,- Euro. Wer eine ausrangierte Festplatte zur Verfügung hat, der muss nur noch ca. 40,- Euro für ein USB-Gehäuse berappen. Somit kommt eine derartige Lösung auf rund 120,- Euro. Sie lässt sich somit recht einfach verbauen und stört auch nicht durch irgendwelche Laufgeräusche, da das Gerät selbst keine Lüfter verwendet. Hörbar ist nur eventuell die externe Platte selbst. Aber der Geräuschpegel hängt ebenso stark von der Qualität der verbauten Platte ab. Betrieben wird das Gerät dann an einem Switch oder auch Router, über den sämtliche Zugriffe innerhalb des Netzwerkes geregelt werden. Bei Anschaffung eines Routers, der vermutlich Anfragen auf ein DSL-Modem weiterleiten soll, sind für den erweiterten Betrieb einer NSLU2 (Web- Und/oder FTP-Server) folgende Eigenschaften von Vorteil: *Firewall/Virtual Server Routing: Hier wird die Anfrage von außerhalb gesteuert. Möchte man z.B. auf eine Website zugreifen, dann leitet der Router diese Anfrage auf eine festgelegte interne IP-Nummer weiter. Diese ist dann eben die für den NSLU2 festgelegte IP. *Dynamic DNS: Da man bei der Wiederanwahl in das Internet in der Regel eine neue IP bekommt, wird der Zugriff auf einen eigenen Server unnötig erschwert. Hierzu legt man sich dann z.B. über Dynamic Network Services DynDNS http://www.dyndns.org Namen fest, der dann bei der Wiedereinwahl die eigene IP-Nummer automatisch übermittelt bekommt. Somit ist man immer über den festgelegten Domain-Namen erreichbar und muss somit nicht mehr mit komplizierten IP-Nummern hantieren. *Auto Reconnect: Der Router sollte sich selbständig wieder an das Internet verbinden, sobald die Verbindung seitens des Providers getrennt wird. Hier bitte zwei Dinge beachten: Zum einen ist dies natürlich nur interessant, wenn ein zeit- und volumenunabhängiger Tarif abgeschlossen wurde, also eine klassische Flatrate. Alles andere wird TEUER!!! Zum anderen bitte darauf achten, ob hierbei nicht vertragliche Regelungen seitens Eures Providers derartige Nutzung untersagen. Bitte informiert Euch über beide WICHTIGEN Dinge. Denn beides kann Geld kosten! <div style="float:left;padding-right:20px"> [[Bild:nslu2_2.jpg|NSLU2]] </div> '''Wieso nun gerade dieses Gerät?''' Nach kurzer Zeit hat sich herausgestellt, dass im Inneren der NSLU2 ein normales Linux schlummert, das nun viel mehr kann, als nur Daten über das Netz zu schaufeln. Muss auch so sein, denn das Gerät wird über ein Web-Interface administriert, was zumindest schonmal einen Webserver im Inneren vermuten lässt. Und noch viel mehr! Der Datenspeicher ist zudem ein Samba-Server, der nun betriebssystemunabhängig verschiedene Betriebssysteme versorgen kann. Nachdem findige Leute die Maschine sich zur Brust genommen haben, war es sehr schnell möglich, weitere Programme hierauf zum Laufen zu bringen. Somit kann das Gerät auch als normaler Webserver, als FTP-Server, Mail-Server und auch für den Anschluss einer Webcam genutzt werden. Dabei verliert es nicht die Funktionalität, die es von Haus aus mitbringt: Ein Datenserver im Netz zu sein. Ich werde nun hier diverse Bearbeitungsschritte protokollieren, die ich selbst an diesem Gerät anhand diverser Anleitungen im Netz (div. FAQs und Newsgroup-Beiträge) durchprobiert habe, um zu demonstrieren, wieviel Power in diesem erstmal recht unscheinbar wirkenden Gerät steckt. Genug, um hierbei auch ein kleines Büro mit Daten zu versorgen und über das Internet für einen Datenaustausch erreichbar zu machen. '''All gates are open now!''' <br /> <br /> <br /> <br /> <br /> <br /> ==Wie flashe ich das Gerät?== <div style="float:right;padding-left:20px"> [[Bild:slug01.png|NSLU2]] </div> Dies könnt Ihr im Adminpanel mittels dieses Tools durchführen. Zuerst bitte die Festplatten abstöpseln. Beim Update darf die Festplatte '''NICHT''' angeschlossen sein. Jetzt als Admin ('''Administration''' anklicken) anmelden und auf '''Advanced'''. Hier dann Upgrade anklicken. Die Firmware als *.bin- File kann dann dort angegeben werden. Danach auf "'''Start Upgrade'''" klicken und abwarten. Das Tool startet die NSLU2 dann selbständig. Bitte den Updatevorgang NICHT unterbrechen. Es dauert in der Tat einwenig, bis Ihr eine Erfolgsmeldung bekommt und das Gerät neu gestartet wird. Nach dem Reboot solltet Ihr dann einen Hinweis auf der Startseite über Euere neue Firmware finden. Die aktuelle Firmware bekommt Ihr unter folgender URL: http://www.slug-firmware.net/u-dls.php. Die Originalfirmware gibt es unter dieser Adresse [http://www.linksys.com/servlet/Satellite?c=L_Download_C2&childpagename=US%2FLayout&cid=1115417109974&packedargs=sku%3D1115416906769&pagename=Linksys%2FCommon%2FVisitorWrapper]. Sollte das Gerät dabei "zerflasht" werden ist Ruhe zu bewahren! Man glaubt es fast kaum, aber ich persönlich habe den Eindruck, dass man mit einem großen Hammer auf die Kiste hauen muss, damit es tatsächlich kaputt ist. In den meisten Fällen läßt sich ein fehlgeschlagener Flash auch wieder retten, ohne dass das Gerät eingeschickt werden muss. Dazu bitte mein Kapitel "Notoperation!" lesen. Wer sich es zutraut, kann auch auf diese Art und Weise gleich die Firmware auf den internen Speicher schreiben. <br /> <br /> <br /> <br /> <br /> <br /> ==Notoperation!== Sollte irgendwann mal nichts mehr gehen, dann muss eine kleine Notoperation durchgeführt werden. Symptom: Das Gerät läßt sich nichtmehr ansteuern, kein Ping funktioniert und auch das mitgelieferte Setup-Programm von CD erkennt das Teil nicht mehr. Um das zu reparieren muss das Gerät neu geflasht werden. Ihr benötigt dazu ein Biosfile (bitte Version 2.3R25 [ftp://ftp.linksys.com/pub/network/nslu2-fw-2.3r25.zip] ) und einen Flasher, den Ihr HIER [http://www.nslu2-linux.org/wiki/Main/SercommFirmwareUpdater] herunterladen könnt. Den Flasher installiert dann gleich mal bevor Ihr weiter macht. ===Variante 1 (Windows)=== '''1.)''' Zuerst muss das Netzwerk auf '''192.168.0.x''' umgestellt werden. Dabei darf die Nummer '''192.168.0.1''' von keinem weiteren Gerät belegt sein, denn diese benötigt unsere kleine Box. '''2.)''' Steckt nun das Gerät an, schaltet es aber noch nicht ein! Jetzt eine Telnetsession mit '''telnet 192.168.0.1 9000''' aufmachen, aber '''NOCH NICHT''' mit Enter abschicken, sondern erstmal nur in die Dos-Shell eingeben! '''3.)''' Jetzt muss es ganz schnell gehen! Schickt den Telnetbefehl ab und drückt dabei gleichzeitig die Einschalttaste am Gerät. Wenn die Anzeige "'''Verbinden....'''" in eine erste Biosmeldung umschaltet müsst Ihr sofort die Taste''' STRG+C''' drücken. Wenn Ihr nun ein "RedBoot>" am Prompt erscheinen seht, dann seid Ihr "drin". Falls nicht muss die Prozedur wiederholt werden, bis Ihr den richtigen Moment trefft. '''4.)''' Nun gebt "'''upgrade'''" ein und drückt '''Enter'''. Jetzt müßte ein Status-LED am Gerät grün/orange (bei neueren Geräten dunkelorange/orange) blinken. '''5.)''' Startet nun das installierte Upgrade-Utility. Wählt hier Eure Netzwerkkarte aus und auf "'''Browse'''"->"'''Browse''' '''Targets'''" klicken. Nun müsstet Ihre eine MAC-Adresse sehen, die Ihr anklickt. Dann auf Files und Euer Bios (*.bin Datei) auswählen. Auf '''Öffnen''' klicken und mit '''OK''' bestätigen. Jetzt startet den Upgradevorgang indem Ihr auf den Button '''Upgrade''' drückt. '''6.)''' Das alles dauert nun ne kleine Weile. Zuerst wird das Eeprom gelöscht, danach neu aufgespielt und dann überprüft. Es versteht sich von selbst, dass hier nicht unterbrochen werden darf! Wenn alles gut gelaufen ist, dann sollte die Meldung "'''Upgrade succsessfully'''" erscheinen, die Ihr mit "'''OK'''" wegklickt. '''7.)''' Das Gerät startet von selbst neu. (Also wartet bis zum nächsten Piepsignal) '''8.)''' Falls Ihr nun unter der alten IP nicht mehr auf Euer Gerät kommt, dann wurde es auf '''192.168.1.77''' zurückgestellt. Das deutet allerdings auf einen Fehler hin, der sich mit einer Fehlermeldung im Adminpanel zeigt: "'''Can't get Samba Information'''". Wenn das der Fall ist, dann muss noch der Configbereich im Eeprom gelöscht werden. Macht nochmal einen RedBoot wie oben beschrieben. Gebt dann am Prompt folgendes ein: '''fis erase -f 0x50040000 -l 0x20000''' (Hinweis: das -l ist ein kleines L !!!) Bitte genau dies eingeben! Bei einen Tippfehler kann das Eeprom beschädigt werden! Danach ein '''reset''' eingeben. Dann funktioniert auch die Eingabe der Serverinfos im Administartionspanel wieder. '''HINWEIS:''' Es kann leider sein, dass neuer Netzwerkkarte vom UGUTIL nicht erkannt werden. Hierzu ist dann eine ältere Standard-Karte zu diesem Zwecke einzusetzen. Bei mir wurde der onboardchip eines Nforce4 Chipsatzes nicht erkannt. Dafür der Netgear WG111v2 USB Wlan-Stick. Ob ein Update über Funk ratsam ist sollte jeder für sich entscheiden. '''HINWEIS 2:''' Bevor unter Windows ein Update vorgenommen wird, sollte die Softwarefirewall kurzfristig dafür abgeschalten werden. Dies kann nur nervige Sperrungen hervorrufen, die das Updaten verzögern. '''HINWEIS 3:''' UGUTIL läuft leider nicht unter Vista 64bit <br /> <br /> <br /> ===Variante 2 (Linux)=== Der meine ich etwas einfachere Weg geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="Unslung-6.8-beta.bin"</pre></code> ''(das Beispiel gilt für die im Moment aktuelle 6.8 Firmware) '' Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="Unslung-6.8-beta.bin"</pre></code> (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2) Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre>linux:/home/test/Work/upslug2 # ./upslug2 --image="Unslung-6.8-beta.bin" LK........... xx:xx:xx:xx:xx:xx Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LK............. xx:xx:xx:xx:xx:xx . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Nachdem die Kiste automatisch neu startet ist die neue Firm wieder drauf. <br /> <br /> <br /> <br /> ==Unslingen und User einrichten== Zuerst wird über das Administrationspanel die neue Firmware eingespielt. Das funktioniert menügesteuert. Danach müssen wir das Gerät "entsichern", damit eine Telnet-Session zugelassen wird und wir in das geheiligte Innere der Maschine gelangen können. '''1.''' Startet die Kiste ohne angeschlossener Festplatte. Ruft jetzt im Browser unter Angabe der IP nebst des eventuell von Euch neu eingestellten voreingestellten Ports folgende URL auf: '''http://192.168.1.77:8080/Management/telnet.cgi''' Hier werdet Ihr nach dem Adminpasswort gefragt. Sollte das nicht verstellt sein, dann lautet es werkseitig admin:admin . Jetzt könnt Ihr bequem auf einen Button klicken, um die Telnetsession zu "enablen" (aktivieren). Vergesst bitte nicht, wenn Ihr mit Euren Arbeiten an der Slug fertig seid, hier wieder auf "disable" zu klicken, damit die Maschine vor Zugriffen gesichert ist. '''''Hinweis:''' Ab de unslug Version 6.8 kann man dies auch komfortabel auf der Startseite des Administrationspanel erledigen!!!'' Schaltet nun von Eurer Shell aus auf eine Telnetsession '''telnet [IP der Slug]''' '''''Hinweis:''' Ein sehr schönes Tool hierzu ist der Putty. Die Projektseite dazu findet Ihr hier: PuTTY: http://www.putty.nl/ Richtet ein Profil für die NSLU2 im Putty ein (in der Konfiguration telnet anklicken, die IP der Slug eintragen und als neues Profil mit einem Namen -z.B. nslu2 - abspeichern) und legt eine Verknüpfung an. Diese erweitert Ihr mit dem Parameter -load [profilname] , also unter Windows mit unserem nslu2 Profil z.B. putty.exe -load nslu2 . Dann genügt ein Doppelklick auf die Verknüpfung und Ihr habt schon eine Telnetverbindung zum gewünschten Client vor Euch auf dem Bildschirm.'' '''''Hinweis''''': Damit später auch die NSLU2 von der Konsole aus auf die Repositories zugreifen kann, muss im Webadmin noch ein Gateway eingetragen werden! Dies ist in der Regel die IP Eures Routers! Ohne diesen erhaltet Ihr beim Installieren von zusätzlichen Paketen eine Fehlermeldung. '''2.''' Telnet auf die Box und hier nun mit root:'''uNSLUng''' anmelden. Wenn Ihr als Root angemeldet seid, erhaltet Ihr in etwa diese Meldung: <code><pre>login: root Password: No directory, logging in with HOME=/ Welcome to Unslung V2.3R63-uNSLUng-6.8-beta -------- NOTE: RUNNING FROM INTERNAL FLASH -------- This system is currently running from the internal flash memory, it has NOT booted up into "unslung" mode from an external drive. In this mode, very few services are running, and available disk space is extremely limited. This mode is normally only used for initial installation, and system maintenance and recovery. BusyBox v0.60.4 (2005.03.22-06:52+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands.</pre></code> Danach die Festplatte wieder anschließen. Wartet nun ab, bis die Box die Festplatte als angeschlossen anzeigt (grünes LED an der Box, oder über das Web-Adminpanel). Jetzt seid Ihr in der Box schonmal drin. Damit nun das Betriebsystem auf die Festplatte ausgelagert wird (unslingen) gebt nun folgenden Befehl an der Konsole ein: '''/sbin/unsling disk2''' Ab der Firmwareversion 6.8 wird die Festplatte hierzu an den USB-Port 2 angeschlossen. Danach kann hier sogar ein root-Passwort eingegeben werden, was dann für das System generell gilt. Wenn das Unslingen fertig ist das Gerät neu starten. Die Platte bleibt am USB-Port2!!! Es dauert eine Weile, bis die Sache erledigt ist. Jetzt kann aufgrund des wesentlich größeren Speicherplatzes später entsprechend neue Software installiert werden. '''3.''' Ruft in Euerem Browser das Administrationspanel auf und legt einen neuen User an (z.B. testi). Dieser soll auch ruhig ein Heimatverzeichnis bekommen, also hier das im Konfigmenü auswählen. Speichern und beenden. Das neue Heimatverzeichnis liegt dann im Wurzelverzeichnis und trägt den Namendes Users, also in unserem Beispiel "/testi" '''4.''' In der Telnetkonsole dann '''vi /etc/passwd''' eingeben. Mit "i" in den Editmodus wechseln. '''5.''' Sucht nun die Zeile mit <code><pre>Testi:xyzverschlüsseltes.passwort:2002:501:::/dev/null</pre></code> Damit nun später die bash verwendet werden kann und auf das Verzeichnis auch via ftp ein Zugriff erfolgen kann, werden wir die Zeile hinten abändern. Dazu legen wir nochmal das Heimatverzeichnis des Users fest: <code><pre>testi:xyzverschlüsseltes.passwort:2002:501::/testi:/bin/sh</pre></code> '''6.''' Mit "'''ESC'''" den Editmodus verlassen. mit ":w" speichern und ":q" beenden. '''7.''' Zum Schluß updaten wir die Slug gleich und sehen dabei, ob unser neuer User wirklich Rootrechte hat. Hierzu folgendes ausführen: '''ipkg update'''<br /> '''ipkg upgrade''' Danach werden automatisch die neuesten Pakete gezogen und installiert. Zudem sollten noch folgende Einstellungen im Webadmin gemacht werden: Ruft dazu Eure Konfiguration auf und geht auf '''Administration - > System'''. Dann entfernt die Haken vor -> Enable Guest Logins<br /> -> Enable FTP-Server<br /> -> Enable UPnP Support '''Wichtig''' ist, dass Ihr noch den Port des Webadmins von 80 auf einen anderen ändert (8282 oder ähnliches). Den Port 80 benötigt Ihr dann für Euren Apache. Die Konfig sollte dann in etwa wie folgt aussehen: [[Bild:slug03.jpg|center]] '''''Hinweis:''' Ihr müsst nicht jedes mal den Webadmin bemühen, um die Slug neu zu starten. Ebenso ist es nicht notwendig, jedes Mal aufzustehen, und das Knöpfchen direkt am Gerät zu drücken. Wenn Ihr eh schon in der Konsole eingeloggt seid, dann geht das über zwei lockere Befehle am Prompt:'' '''sync'''<br /> '''reboot''' <br /> <br /> <br /> ==bash installieren== Ziel ist es, die bash soweit zu installieren, dass jeder User entsprechend die gleiche bash verwendet. Ich beziehe mich dabei auf die Anleitung von unslung.de, passe diese allerdings hie und da einwenig an, um vielleicht das eine oder andere einwenig chronologischer in der Beschreibung darzustellen. '''1)''' Alles passiert natürlich unter telnet. Loggt Euch mit Euerem root-Account ein, und installiert zuerst die bash: '''ipkg install bash''' '''2)''' Falls noch nicht geschehen legen wir unter '''etc''' eine Datei '''profile''' an und editieren diese gleich: '''vi /etc/profile''' ''Hinweis: Der vi Editor - Editmodus: Taste "i" drücken. Editmodus verlassen: "ESC" drücken. Speichern: Tasten ":w" und beenden mit Tasten ":q"'' '''3)''' Nun fügen wir folgende zwei Zeilen in die Datei ein: '''export PS1="\[\033[1;33m\]\u@\h\[\033[0;37m\]:/> "'''<br/> und GANZ ZUM SCHLUSS '''test -f /opt/bin/bash && exec /opt/bin/bash''' Wer's etwas freundlicher beim Begrüßen mag, der kann oben in der '''etc/profile''' noch folgende Zeilen ergänzen: <code><pre>echo --------------------------------------------------------------------- echo "Hallo $USER, willkommen auf der Slug! ;-)" echo --------------------------------------------------------------------- echo </pre></code> '''4)''' Als nächstes legen wir im root-Verzeichnis die '''.bashrc''' an: '''vi /.bashrc''' In diese Datei können wir einige hilfreiche aliase und Umgebungsvariablen setzen. Ich empfehle folgende Zeilen einzugeben: <code><pre>alias "d=ls -la" alias "dir=ls -la" export PATH=$PATH:~/bin:. </pre></code> '''5)''' Die '''.bashrc''' muss nun in jedes Userverzeichnis kopiert werden, das sich im Rootverzeichnis befindet. <br /> <br /> <br /> ==Midnight Commander installieren== '''1)''' Zuerst muss das Programm installiert werden: '''ipkg install mc''' (falls vorher noch nicht geschehen, dann zuerst '''ipkg update''' eingeben!) '''2)''' Falls noch nicht geschehen, die Datei '''/etc/profile''' anlegen und editieren: '''vi /etc/profile''' '''3)''' Dort zwei Zeilen ergänzen: <code><pre>export TERMINFO=/opt/lib/terminfo export TERM=xterm-pcolor</pre></code> '''4)''' System neu starten. '''5)''' Midnight Commander mit '''/opt/bin/mc''' starten. Falls Ihr die bash installiert habt, könnt Ihr auch in der '''.bashrc''' folgendes ergänzen: '''alias "mc=/opt/bin/mc"''' Das macht die Sache recht praktisch, denn so wird das Programm ganz einfach mit einem '''mc''' in der shell gestartet. <br /> <br /> <br /> <br /> ==FTP-Server einrichten (vsftpd)== '''1)''' Zuerst legt man ein leeres Verzeichnis an:<br /> '''mkdir -p /usr/share/empty''' '''2)''' Vsftp-Daemon installieren:<br /> '''ipkg install vsftpd''' '''3)''' rc.xinetd Datei anlegen und mit Inhalt füllen:<br /> '''vi /unslung/rc.xinetd''' Dann im vi-Editor den Editmodus mit Drücken der Taste "i" aktivieren und folgendes abtippen: <code><pre>#!/bin/sh if ( [ ! -f /etc/inetd.conf ] || !(grep vsftpd /etc/inetd.conf -q) ) then echo "ftp stream tcp nowait root /opt/sbin/vsftpd /opt/etc/vsftpd.conf" >>/etc/inetd.conf fi return 1</pre></code> Bitte HAARKLEIN GENAU abschreiben! Bitte zweimal kontrollieren! Dann Edit-Modus mit "ESC" beenden und mit<br /> ''':w'''<br /> abspeichern und mit<br /> ''':q'''<br /> beenden '''4)''' vsftpd.conf editieren, damit jeder angemeldete User nur seinen eigenen Bereich sehen kann, und nicht in Toplevel wechseln kann: '''vi /opt/etc/vsftpd.conf''' Hier dann im Edit-Modus (Taste "i" !) folgende Zeile am Schluss ergänzen: '''chroot_local_user=YES''' Abspeichern und beenden! '''5)''' Logdatei für den ftp-Daemon erstellen:<br /> '''mkdir -p /opt/var'''<br /> '''mkdir -p /opt/var/log'''<br /> '''touch /opt/var/log/vsftpd.log''' '''6)''' Ersten User anlegen: Im normalen Adminpanel einen neuen User anlegen. Nennen wir ihn hier als Beispiel "upload". Dieser bekommt auch beim Erstellen ein Homedirectory auf der Platte zugesprochen. Jetzt müssen wir noch die passwd anpassen: '''vi /etc/passwd''' Den User "upload" suchen. Die Zeile sieht dann in etwa so aus: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501:::/dev/null</pre></code> Das ändern wir dann in folgender Weise ab: <code><pre>upload:xyz.verschlüsseltespasswort:2003:501::/upload:/bin/sh</pre></code> Da auf der Slug nun alles auf dem USB-Port2 liegt, wäre das korrekte Verzeichnis '''/share/flash''' ... Wir umgehen das damit, indem wir den die Verlinkung unter '''/root''' verwenden. Somit wird dem User ein festes Heimatverzeichnis zugewiesen, das sich eben auf der Platte befindet. Das alles wie oben schon beschrieben dann speichern und beenden. '''7 )''' Die NSLU dann neu starten und mit einem ftp-Clienten oder via Webbrowser <code><pre>ftp://username:deinpasswort@ipnummerdernslu ausprobieren.</pre></code> Noch ein Tipp: Wenn man ein laufendes Protokoll sich anzeigen lassen möchte, dann macht eine Telnet-Session auf und gebt folgendes ein: '''tail -f /opt/var/log/vsftpd.log''' Dann habt Ihr immer im Blick, was gerade auf dem Server passiert. '''Hinweis 1:''' Solltet Ihr einen Tippfehler bei der Erstellung der /share/hdd/conf/unslung/rc.xinetd gebaut haben und startet das Dingens via Neustart der Kiste oder mit dem Befehl /etc/rc.d/rc.xinetd, dann kann es sein, dass Ihr eben keinen Zugriff via ftp bekommt. Ihr entdeckt dann zwar den Fehler im /share/hdd/conf/unslung/rc.xinetd aber auch nach Korrektur startet der FTP-Server nicht. Das liegt nun daran, dass beim ersten Start die Zeile echo"ftp... " in das /etc/rc.d/rc.xinetd Script MIT ÜBERNOMMEN wurde. Also hier dann den Fehler, sollte er in der echo-Zeile entstanden sein, auch ausbessern! Dann klappt es! Die Festplatte zu löschen und neu zu unslingen bringt auch nichts, da das etc/rc.d/rc.xinetd auf dem Flashspeicher liegt. Hier müsste man die Firm dann komplett neu aufspielen. Aber da lässt sich sicher besagte Datei einfacher und schneller editieren. <br /> <br /> <br /> ==Der Apache Webserver== Der Apache Webserver ist auf der Slug schnell installiert. Hierzu wird sich erstmal als root per telnet eingeloggt. Danach führen wir den Befehl '''ipkg install apache''' aus. Das System wird automatisch konfiguriert und der Webserver gestartet. Dieser liegt allerdings auf dem Port 8000. Ruft den Server nun mit '''[eure ip adresse]:8000''' auf. Es ergibt dann folgendes Bild: [[Bild:slug04.jpg|center]] Um den Apache nun anzupassen rufen wir die Konfigurationsdatei des Apache auf: '''vi /opt/etc/apache2/httpd.conf''' Wichtige Zeile/ Einträge: '''Listen 8000''' gibt den Standardport an. Ändert dies auf '''80''', um den normalen Port eines Webservers zu verwenden. '''DocumentRoot "/opt/share/www"''' legt fest, wo Eure Webfiles liegen. Idealerweise legt hier einen User an, den Ihr per ftp erreichen könnt. Auf dieses Userverzeichnis schreibt diese Zeile um. Z.b. nennt sich der User webserver . Also lautet die Zeile dann: '''DocumentRoot "/webserver"''' '''<Directory "/opt/share/www">''' muss ebenso angepasst werden (z.B. '''<Directory "/webserver">''' ) '''DirectoryIndex index.html index.html.var''' Diese Zeile ergänzt dann noch durch ein "'''index.htm''' und '''index.php'''" , damit auch Pages mit der htm und php Extention geladen werden können. Das sollten die wichtigsten Punkte sein. Im Internet finden sich noch eine Vielzahl an weiteren Konfigurationsmöglichkeiten für den Apache. Speichert Euere Änderungen ab. Kopiert nun eine Testpage auf Euer Webverzeichnis und startet die Slug neu. Nun müsste nach einer kurzen Wartezeit der Webserver mit Eurer normalen IP abrufbar sein. '''''Hinweis:''' Bei Eurem Webserver bitte die Files immer via ftp und nicht dem Samba-Share hochladen. Denn nur über einem ftp-Upload ist sichergestellt, dass Ihr keinen Access-Error wegen mangelnder Zugriffsrechte bekommt.'' <br /> <br /> <br /> ==PHP Erweiterung für Apache== Zuerst loggen wir uns wieder als root via einer Telnetsession ein. Danach installieren wir zwei Pakete: '''ipkg install php-apache eaccelerator''' Jetzt starten wir den Apache neu, indem wir folgenden Befehl absetzen: '''/opt/etc/init.d/S80apache''' Jetzt legen wir folgenden Code auf unsere Homepage: <code><pre><?php phpinfo() ?></pre></code> Das File speichern wir als "'''phpinfo.php'''" ab. Dieses rufen wir dann über unseren Browser auf: '''[deine ip nummer]/phpinfo.php''' Wenn alles funktioniert sollte dies in der Art zu sehen sein: [[Bild:slug05.jpg|center]] Dieses Script gibt nun Auskunft, welche Version des Apache und des PHP installiert ist. Hinweis! Sollte der php-Aufruf nur einen Plain-Text bringen, dann kann es sein das in einer möglichen neuern Apache Version der php-Aufruf in der '''/opt/etc/apache2/httpd.conf''' fehlt. Ergänzt hierfür am Ende der Datei folgende Zeilen: <code><pre>LoadModule php5_module libexec/libphp5.so AddType application/x-httpd-php .php .phtml</pre></code> <br /> <br /> <br /> ==Mysql Datenbank installieren== Mysql selbst installieren wir über ein Konsolenfenster als root. Hierzu gebt folgenden Installationsbefehl ein: '''ipkg install php-mysql''' Nachdem die Pakete installiert sind setzen wir sofort ein root- Passwort für die Datenbank: '''/opt/bin/mysqladmin -u root password dein_passwort''' Jetzt legen wir eine neue Datenbank mit den Namen Beispiel an: '''/opt/bin/mysqladmin -p create beispiel''' ''Hier muss nun Euer Passwort eingegeben werden '' Das wären die ersten wirklichen Fingerübungen am Prompt, was die Datenbank betrifft. Damit der Webserver die Datenbank auch sauber integriert startet die Slug einfach neu: '''sync'''<br /> '''reboot''' Ruft nun nochmal Euer phpinfo-Script auf, wie ich es im PHP-Abschnitt beschrieben habe. Im Bereich "'''addidional .ini files parsed'''" muss jetzt die '''mysql.ini''' stehen: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:slug06.jpg|NSLU2]]</div> Wer jetzt natürlich nicht unbedingt sich die Finger beim Eingeben von cryptischen Befehlszeilen am Prompt brechen möchte, wenn er seine Datenbank administriert, der braucht auch nicht auf seiner kleinen Slug auf die Vorzüge der grafischen Administration via phpmyadmin zu verzichten. Das Programmpaket kann man sich unter http://www.phpmyadmin.net herunterladen. Das entpackt man dann auf seinen Webserver und legt wie gehabt seine '''config.inc.php''' an. Bitte konsultiert die beiliegende Doku, um den genauen Installationsvorgang in Erfahrung zu bringen. Weiteres würde über den mir gesteckten Rahmen dieser Dokumentation hinaus gehen. Wenn Ihr die Dateien oben habt und die Zugriffe in der config geregelt habt, dann solltet Ihr das phpmyadmin wie gewohnt benutzen können: <br /> [[Bild:slug07.jpg|center]] '''''Hinweis:''' Hier ist es ratsam, über ein htaccess File das Verzeichnis zu schützen, auf dem das phpmyadmin abgelegt ist. Sonst kann ja jeder in der Datenbank herumpfuschen.'' ===Exkurs: htacces anlegen=== Das ist einwenig kniffeliger, aber ich denke, dass man das, wenn man sich Schritt für Schritt an meine Anleitung hält machbar. Zuerst müssen wir dem Apache erklären, dass er nicht nur Friedenspfeifen rauchen soll, sondern auch gesicherte Verzeichnisse zu verwalten hat. Dazu müssen wir seine Konfigurationsdatei "nachbehandeln". In einer telnet-Session rufen rufen wir diese als root im vi-Editor auf: '''vi /opt/etc/apache2/httpd.conf''' Die Zeile '''AllowOverride None''' muss auf '''AllowOverride All'''<br /> ''( i oder Einfg. zum Editieren drücken, ESC zum Verlassen des Editmodus)'' gesetzt werden. Dann mit :w speichern und mit :q verlassen. Jetzt startet den Apache wieder neu, damit die neue config eingelesen wird: '''/opt/etc/init.d/S80apache''' Somit sind wir entsprechend vorbereitet, die gewünschten Verzeichnisse zu sichern. Wir wollen nun das Verzeichnis des Webservers /phpmyadmin absichern. Dieses liegt auf der Slug Beispielsweise unter /webserver/phpmyadmin . Legt nun eine Datei .htaccess mittels vi an '''vi /webserver/phpmyadmin/.htaccess''' und füllt diese mit folgenden Zeilen: <code><pre>AuthType Basic AuthName Phpmyadmin AuthUserFile /webserver/phpmyadmin/.htpasswd require valid-user</pre></code> Hinter "'''AuthName'''" könnt Ihr eine beliebige Bezeichnung setzen. Diese wird dann nur eben später am Eingabefenster des Browsers angezeigt, wenn nach dem Passwort gefragt wird. Man kann natürlich noch einige Erweiterungen in die '''htaccess''' mit aufnehmen. Hierzu bietet sich ein sehr schönes Onlinekonfigurationsprogramm an, das Ihr unter folgender URL [http://www.harbeck-is.de/tools/htaccess_gen/htaccess_loader.php] abrufen könnt. Allerdings sollte unsere Konfig für das Erste genügen. Dann legen wir die Passwortdatei '''.htpasswd''' an. Dazu liefert uns der Apache ein Tool, das uns auch die Passwörter entsprechend verschlüsselt. <code><pre>htpasswd -C .htpasswd username</pre></code> Gebt nun das Passwort ein. Einen weiteren User legt Ihr mit <code><pre>htpasswd .htpasswd neueruser</pre></code> an. Macht auch diese Datei lesbar: <code><pre>chmod 644 .htpasswd</pre></code> Sollte der Aufruf '''htpasswd''' nicht funktionieren, so habt Ihr in der '''etc/profile''' den entsprechenden Suchpfad nicht eingetragen. Ihr könnt Euch auch kurzfristig damit behelfen: <code><pre> export PATH=$PATH:/opt/sbin:.</pre></code> Ansonsten solltet Ihr eh folgende Zeilen in die '''/etc/profiles''' aufnehmen: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Es funktionieren dann auch komplexere Anwendungen, wie z.B. das bekannte phpbb-Forum ( Download hier: http://www.phpbb.com/ ) Hinweise zur Installation entnehmt bitte der beiliegenden Dokumentation.<br /> Testinstallation: [[Bild:slug08.jpg|center]] <br /> <br /> ==Zeitgesteuerte Events - Die Crontab== Ihr könnt natürlich wie unter jedem Linux-System zweitgesteuerte Events, wie z.B. Sicherungen über die Crontab steuern. Im Internet findet Ihr eine Vielzahl an Seiten, die den genauen Aufbau der Crontab beschreiben. Da wir einen Webserver haben und mit einer Datenbank arbeiten, macht es Sinn, die Datenbank regelmäßig auf ein extra Verzeichnis zu speichern. Wir gehen in unserem Beispiel davon aus, dass wir die Datenbank "beispiel" alle 30 Minuten speichern wollen. Zuerst legen wir ein Script an, das unsere Datenabank wegsichert. Idealerweise habt Ihr einen weiteren user (z.B. test) angelegt, auf den Ihr ftp-Zugriff habt. In dessen Verzeichnis werden wir die Datenbank "dumpen". Die Datei legen wir wieder mit dem guten alten vi an: '''vi /usr/sbin/sqldump.sh''' Der Code sieht im Groben wie folgt aus: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) datenbankname > /zielverzeichnis/datenbankname.sql --default-character-set=utf8</pre></code> (bitte die /opt/bin ... in eine Zeile schreiben) In unserem Beispiel also: <code><pre>#!/bin/sh /opt/bin/mysqldump --password=(passwort) beispiel > /test/beispiel.sql --default-character-set=utf8</pre></code> Als Passwort (dann ohne die Klammern!!!) gebt Ihr Euer admin-Passwort ein, das Ihr bei der mysql-Installation festgelegt habt. Speichert die Datei ab. Jetzt müssen wir die Datei noch ausführbar machen. Das funktioniert über ein lockeres '''chmod +x /usr/sbin/sqldump.sh''' Testet das Script einfach, indem Ihr das Datenbank-Dumping per Hand startet: '''/usr/sbin/sqldump.sh''' Nun editieren wir die Crontab. Das machen wir alte Linux-Hasen wieder über den vi: '''vi /etc/crontab''' fügt ans Ende der Datei folgende Zeile ein: '''*/30 * * * * root /usr/sbin/sqldump.sh &>/dev/null''' Die Crontab sollte nun ungefähr so aussehen: <code><pre>SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ # ---------- ---------- Default is Empty ---------- ---------- # 0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null 0 0 * * * root /usr/sbin/WatchDog &>/dev/null 1 * * * * root /usr/sbin/hwclock -s &>/dev/null */30 * * * * root /usr/sbin/sqldump.sh &>/dev/null</pre></code> Speichert Euere Änderungen ab. Danach startet die Slug neu, damit die Crontab auch wieder neu eingelesen wird: '''sync'''<br /> '''reboot''' Prüft dann bei Gelegenheit nach, ob Ihr tatsächlich immer neue Sicherungen in Euer Sicherungsverzeichnis "gedumpt" bekommt. <br /> <br /> <br /> ==Prozessverwaltung mit htop== Unter Linux kennen wir alle das fast schon überlebensnotwendige '''top''' , das uns aktuelle Prozesse anzeigt und uns ermöglicht, auch einen unerwünschten Prozess zu "'''killen'''", wie es in der Linuxwelt so lautmalerisch tatsächlich heißt. Für die Slug gibt es ein ähnliches Programm, das sogar einwenig komfortabler gestaltet ist: '''htop'''. Installiert htop einfach mit einem <code><pre>ipkg install htop</pre></code> Legt dann noch eine Verknüpfung zu diesem Tool an: <code><pre>ln -s /opt/bin/htop /bin/htop</pre></code> Danach könnt Ihr das Programm ganz bequem mit <code><pre>htop</pre></code> starten. Ihr solltet dann folgendes Bild zu sehen bekommen: [[Bild:slug09.png|center]] Interessant hierbei ist noch die Darstellung der CPU Auslastung und der Speicherbelegung. Man sieht damit alles sehr schön auf einen Blick. <br /> <br /> <br /> ==Die Secure-Shell== Wer nicht ständig über das doch ungeschützte telnet auf seine Box zugreifen möchte, kann dies auch über die Secure-Shell (ssh) erledigen. Dazu installiert diese einfach mit einem <code><pre>ipkg install openssh</pre></code> Der Vorteil hierbei ist, dass nicht jedes Mal der Telnet aktiviert werden muss und die Angelegenheit entsprechend verschlüsselt über den Äther geht. <br /> <br /> <br /> ==Mehrere Konsolen mit Screen== Das kleine Programm Gnu Screen [http://www.gnu.org/software/screen/] ermöglicht den User auf einer Konsole mehrere Screens, also Konsolen zu aktivieren, zwischen denen man bequem umschalten kann. So kann beispielsweise eine Log-Datei mit tail oder der htop mitlaufen, während man am nächsten Screen weitere Arbeiten tätigt. Installiert wird Screen einfach durch ein <code><pre>ipkg install screen</pre></code> Das Programm wird dann an der Konsole mit einem <code><pre>/opt/bin/screen</pre></code> gestartet. Soltet Ihr '''/opt bin''' bereits als Suchpfad integriert haben, dann genügt ein <code><pre>screen</pre></code> Damit auch im "Screen" die bash verwendet wird, legt in Eurem Home-Verzeichnis des Users, der eben screen starten darf eine Konfigurationsdatei an: <code><pre>vi .screenrc</pre></code> Dort ergänzt Ihr die folgende Zeile: '''shell bash''' Speichert diese und startet screen neu. Wenn Ihr den Willkommensscreen abstellen wollt, dann schreibt folgende Zeile in die .screenrc: '''startup_message off''' Folgende Befehle solltet Ihr Euch merken: '''Strg+a c''' Startet eine neue Konsole<br /> '''Strg+a''' leer schaltet zwischen den Konsolen um<br /> '''exit''' beendet die Konsole (wenn eine Konsole übrig wird screen beendet)<br /> '''Strg+a d''' beendet screen, screen läuft aber im Hintergrund weiter<br /> '''screen -R''' startet wieder die im Hintergrund noch laufende Screen-Session<br /> Der wesentliche Vorteil von screen ist, dass alle Programme, die Ihr innerhalb der Screen-Session startet, auch dann weiter laufen, wenn Ihr Euch aus der Slug ausloggt. Somit könnt Ihr beispielsweise einen großen Download mittels curl starten, müsst aber nicht den nohup Befehl verwenden, sondern könnt jeder Zeit wieder Euch einloggen und mittels '''screen -R''' die Session aufnehmen und beispielsweise den statistischen Output von curl Euch ansehen. <br /> <br /> <br /> ==Datum und Uhrzeit einstellen== Dies könnt Ihr als root an der Konsole erledigen. Gebt dazu folgendes ein: <code><pre>date MONAT|TAG|STUNDE|MINUTE|JAHR</pre></code> Also wenn es der 4.12.2007 23:24 sein soll, dann muss der Befehl so aussehen: <code><pre>date 120423242007</pre></code> Über den Webadmin könnt Ihr dann zusätzlich noch die Uhrzeit für das Webpanel einstellen. <br /> <br /> <br /> [[Kategorie:NSLU2]] 94a61592ff0239e4eb31b549c9a9fb026adb9c14 Slugdebug 0 18 998 775 2018-06-30T08:48:05Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Fehler beim eaccelerator== '''Wichtig:''' Schaut bitte einmal Eure Apache Error-Log Datei an: '''/opt/var/apache2/log/error_log''' Es kann sein, dass die mittlerweile sehr groß geworden ist und förmlich von eaccelerator Meldungen ( could not lock ) ist. Der eaccereator cacht im php-Bereich und sorgt für etwas mehr Performance beim Laden. Solltet Ihr die error_log vol von eaccelerator Meldungen haben (die kommen im Sekundentakt wenn eine php Seite geladen wird), dann müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Dann brauchen wir noch die dev- Files der php Installation: <code><pre>ipkg install php-dev</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Nun entfernen wir den Beschleuniger: <code><pre>ipkg remove eaccelerator</pre></code> Und starten den Indianer neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun holen wir uns den Quellcode des aktuellen eaccelrator: <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> (auf der Projektseite [http://bart.eaccelerator.net] des eaccelerator könnt Ihr Euch über die aktuelle Versionsnummer informieren) Das Paket entpacken wir locker aus der Hüfte: <code><pre>tar vxf eaccelerator-0.9.5.3.tar.bz2</pre></code> Ab in das Buildverzeichnis: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Nun keine Zeit verschwenden und sofort <code><pre>phpize</pre></code> eingeben. Danach konfigurieren wir den php Beschleuniger mit folgendem einfachen Befehl: <code><pre>./configure --prefix=/opt --with-eaccelerator-userid=nobody</pre></code> Das kann einwenig dauern. Wenn alles fehlerfrei durch ist, kann das Programm gebacken werden: <code><pre>make</pre></code> Danach der obligatorische install: <code><pre>make install</pre></code> Da wir die Scriptfiles nicht manuell anlegen wollen tun wir jetzt das, was keiner erwartet: Wir installieren das Paket nochmal aus dem repository: <code><pre>ipkg install eaccelerator</pre></code> Das legt uns alle benötigten Pakete an Aber wir löschen wieder das File, damit wir unser eigenes verwenden können: <code><pre>rm /opt/lib/php/extensions/eaccelerator.so</pre></code> Und sofort unsere neue Datei rein: <code><pre>cp /work/eaccelerator-0.9.5.3/modules/eaccelerator.so /opt/lib/php/extensions/eaccelerator.so</pre></code> Alte Apache Logdatei tillen: <code><pre>rm /opt/var/apache2/log/error_log</pre></code> Frische Apache Logdatei erzeugen: <code><pre>touch /opt/var/apache2/log/error_log</pre></code> Jetzt startet den Apache nochmal neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Und schaut Euch die Error-Log an: '''tail -f /opt/var/apache2/log/error_log''' Nun ruft Eure Internetseite auf. Sollte natürlich php-Code sein. Die Fehlermeldungen sollten nun nichtmehr auftauchen. Zudem schaut Euch mal Eure phpinfo.php Datei an, ob der eaccelerator tatsächlich cached. Das seht Ihr in der Sektion EACCELERATOR [[Bild:slug10.jpg|center]] Bei dem fehlerhaften eaccelerator sind bei den Memory und cached File Bereich die "0" drin. Wenn es läuft, dann stehen hier entsprechende Werte. <br /> <br /> <br /> ==Fehler bei Midnight Commander== Wer bei einer neuen Installation den Fehler beim Start des MC bekommen sollte, dass ein libext2fs.so nicht gefunden werden kann, der muss das Paket e2fsprogs nachinstallieren: <code><pre>ipkg install e2fsprogs</pre></code> Sollte allerdings mittlerweile nicht mehr auftreten <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -l -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Wenn der Befehl hängen bleibt und Ihr nicht wieder zurück zur Eingabeaufforderung kommt, dann beendet dies mit '''STRG+C''' . Dieser Effekt kann durchaus mit der neueren 6.10er Firmware auftauchen. In diesem Fall lasst die '''-l''' Option weg: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -l -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Bei obigen Fehler auch hier ohne der '''-l''' Option: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==vsftpd Fehler in Version 2.1.0== Mit der Version 2.1.0 kommt es leider zu folgenden Fehler beim Verbinden: '''500 OOPS: could not bind listening IPv4 socket''' Vermutlich wurden beim Codieren einige default Einstellungen nicht einkompiliert. Um die Geschichte nun wieder zu reparieren editiert die '''vsftpd.conf''': <code><pre>vi /opt/etc/vsftpd.conf</pre></code> Fügt folgende Zeilen bitte ein: '''listen=NO'''<br /> '''anonymous_enable=NO'''<br /> '''local_enable=YES'''<br /> '''write_enable=YES''' <br /> Speichert die Änderung ab und beendet den '''inetd''': <code><pre>killall inetd</pre></code> Jetzt startet den '''inetd''' neu: <code><pre>/etc/rc.d/rc.xinetd</pre></code> Jetzt sollte der Connect zu Eurem ftp wieder funktionieren. [[Kategorie:Linux]] 1ddd1c08e78f5b33106067b305618f786a8e3f94 1001 998 2018-06-30T08:48:50Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Fehler beim eaccelerator== '''Wichtig:''' Schaut bitte einmal Eure Apache Error-Log Datei an: '''/opt/var/apache2/log/error_log''' Es kann sein, dass die mittlerweile sehr groß geworden ist und förmlich von eaccelerator Meldungen ( could not lock ) ist. Der eaccereator cacht im php-Bereich und sorgt für etwas mehr Performance beim Laden. Solltet Ihr die error_log vol von eaccelerator Meldungen haben (die kommen im Sekundentakt wenn eine php Seite geladen wird), dann müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Dann brauchen wir noch die dev- Files der php Installation: <code><pre>ipkg install php-dev</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Nun entfernen wir den Beschleuniger: <code><pre>ipkg remove eaccelerator</pre></code> Und starten den Indianer neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun holen wir uns den Quellcode des aktuellen eaccelrator: <code><pre>wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</pre></code> (auf der Projektseite [http://bart.eaccelerator.net] des eaccelerator könnt Ihr Euch über die aktuelle Versionsnummer informieren) Das Paket entpacken wir locker aus der Hüfte: <code><pre>tar vxf eaccelerator-0.9.5.3.tar.bz2</pre></code> Ab in das Buildverzeichnis: <code><pre>cd eaccelerator-0.9.5.3</pre></code> Nun keine Zeit verschwenden und sofort <code><pre>phpize</pre></code> eingeben. Danach konfigurieren wir den php Beschleuniger mit folgendem einfachen Befehl: <code><pre>./configure --prefix=/opt --with-eaccelerator-userid=nobody</pre></code> Das kann einwenig dauern. Wenn alles fehlerfrei durch ist, kann das Programm gebacken werden: <code><pre>make</pre></code> Danach der obligatorische install: <code><pre>make install</pre></code> Da wir die Scriptfiles nicht manuell anlegen wollen tun wir jetzt das, was keiner erwartet: Wir installieren das Paket nochmal aus dem repository: <code><pre>ipkg install eaccelerator</pre></code> Das legt uns alle benötigten Pakete an Aber wir löschen wieder das File, damit wir unser eigenes verwenden können: <code><pre>rm /opt/lib/php/extensions/eaccelerator.so</pre></code> Und sofort unsere neue Datei rein: <code><pre>cp /work/eaccelerator-0.9.5.3/modules/eaccelerator.so /opt/lib/php/extensions/eaccelerator.so</pre></code> Alte Apache Logdatei tillen: <code><pre>rm /opt/var/apache2/log/error_log</pre></code> Frische Apache Logdatei erzeugen: <code><pre>touch /opt/var/apache2/log/error_log</pre></code> Jetzt startet den Apache nochmal neu: <code><pre>/opt/etc/init.d/S80apache</pre></code> Und schaut Euch die Error-Log an: '''tail -f /opt/var/apache2/log/error_log''' Nun ruft Eure Internetseite auf. Sollte natürlich php-Code sein. Die Fehlermeldungen sollten nun nichtmehr auftauchen. Zudem schaut Euch mal Eure phpinfo.php Datei an, ob der eaccelerator tatsächlich cached. Das seht Ihr in der Sektion EACCELERATOR [[Bild:slug10.jpg|center]] Bei dem fehlerhaften eaccelerator sind bei den Memory und cached File Bereich die "0" drin. Wenn es läuft, dann stehen hier entsprechende Werte. <br /> <br /> <br /> ==Fehler bei Midnight Commander== Wer bei einer neuen Installation den Fehler beim Start des MC bekommen sollte, dass ein libext2fs.so nicht gefunden werden kann, der muss das Paket e2fsprogs nachinstallieren: <code><pre>ipkg install e2fsprogs</pre></code> Sollte allerdings mittlerweile nicht mehr auftreten <br /> <br /> <br /> ==Zeitverschiebung des Servers korrigieren== Je länger nun die Slug läuft, desto weiter wird auf dem Gerät die korrekte Zeit von der Slug-Zeit abweichen. Eine Geschichte, die einwenig ärgerlich ist, aber sehr einfach zu beheben. Hierzu werden wir einen NTP Clienten einrichten, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert. Nichts ist schlimmer, als z.B. ein falsches Empfangsdatum einer E-Mail angezeigt zu bekommen, gerade wenn es um geschäftliche Dinge geht. Installiert den NTP Client mit folgenden Befehl: <code><pre>ipkg install ntpclient</pre></code> Dann müssen wir einmal die Zeit manuell synchronisieren und dem Timer der Slug übergeben. Führt dazu folgenden Befehl als root aus: <code><pre>/opt/bin/ntpclient -s -l -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Wenn der Befehl hängen bleibt und Ihr nicht wieder zurück zur Eingabeaufforderung kommt, dann beendet dies mit '''STRG+C''' . Dieser Effekt kann durchaus mit der neueren 6.10er Firmware auftauchen. In diesem Fall lasst die '''-l''' Option weg: <code><pre>/opt/bin/ntpclient -s -h 0.pool.ntp.org && hwclock --systohc --utc</pre></code> Legt ein Logfile an in dem das letzte Update dokumentiert wird: <code><pre>touch /var/log/ntp.log</pre></code> Editiert /etc/crontab und fügt folgende Zeile ein: <code><pre>1 * * * * root /opt/bin/ntpclient -s -l -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Bei obigen Fehler auch hier ohne der '''-l''' Option: <code><pre>1 * * * * root /opt/bin/ntpclient -s -h 0.pool.ntp.org -p123 > /var/log/ntp.log && hwclock --systohc --utc</pre></code> Dann entfernt die Zeile (oder kommentiert sie mit einem # aus): <code><pre>1 * * * * root /usr/sbin/hwclock -s &>/dev/null</pre></code> Startet nun die NSLU2 neu. Ab jetzt wird jede Stunde die Zeit neu mit der Slug synchronisiert. <br /> <br /> <br /> ==vsftpd Fehler in Version 2.1.0== Mit der Version 2.1.0 kommt es leider zu folgenden Fehler beim Verbinden: '''500 OOPS: could not bind listening IPv4 socket''' Vermutlich wurden beim Codieren einige default Einstellungen nicht einkompiliert. Um die Geschichte nun wieder zu reparieren editiert die '''vsftpd.conf''': <code><pre>vi /opt/etc/vsftpd.conf</pre></code> Fügt folgende Zeilen bitte ein: '''listen=NO'''<br /> '''anonymous_enable=NO'''<br /> '''local_enable=YES'''<br /> '''write_enable=YES''' <br /> Speichert die Änderung ab und beendet den '''inetd''': <code><pre>killall inetd</pre></code> Jetzt startet den '''inetd''' neu: <code><pre>/etc/rc.d/rc.xinetd</pre></code> Jetzt sollte der Connect zu Eurem ftp wieder funktionieren. [[Kategorie:NSLU2]] 0654e60cafa20638c0dd1b687faac3beb0bbe779 Nativ kompilieren 0 23 999 32 2018-06-30T08:48:20Z Admin 1 wikitext text/x-wiki ==Native kompilieren== Damit wir einen Quellcode eines Programmes direkt auf der NSLU2 übersetzen können müssen wir zuerst die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. [[Kategorie:Linux]] 8494e6882e6809947d32f519e794979f6cb67369 1000 999 2018-06-30T08:48:33Z Admin 1 wikitext text/x-wiki ==Native kompilieren== Damit wir einen Quellcode eines Programmes direkt auf der NSLU2 übersetzen können müssen wir zuerst die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Zuerst modifizieren wir die '''/etc/profile''', damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. [[Kategorie:NSLU2]] 1653627dfc908830693ff7ef259f587cd1f70236 Der Crosscompiler 0 24 1002 33 2018-06-30T08:49:10Z Admin 1 wikitext text/x-wiki Um Programme außerhalb der NSLU2 für Unslung zu kompilieren muss eine Compilerumgebung auf einem Linux System aufgesetzt werden. Wer hierzu keine native Installation anlegen möchte, oder dies getrennt von einem bereits installierten Linux erledigen will, für dem empfiehlt es sich eine virtuelle Maschine anzulegen. Als kostenloses Programm empfehle ich [http://www.virtualbox.org VirtualBox], das man auch ohne Weiteres auf einem Windows XP oder Vista installieren und damit ein Linux in Betrieb nehmen kann. Ich habe in meinen Beispiel ein Debian Linux (4.0r3 Etch) auf einer virtuellen Maschine installiert, damit ich diese sowohl unter Windows als auch unter Linux starten kann. Aber wie schon gesagt, zwingend notwendig ist die virtuelle Maschine nicht, sondern man kann dies auch auf ein nativ installiertes Linux durchführen. Folgende Pakete müssen unter Linux installiert werden: '''passende linux-headers''' <br /> '''build-essential''' <br /> '''subversion''' <br /> '''bison''' <br /> '''flex''' Die Header hängen von der jeweiligen Distribution und dem installierten Kernel ab. Welchen Kernel Ihr installiert habt könnt Ihr mittels dem Konsolenbefehl <code><pre>uname -a</pre></code> in Erfahrung bringen. Unter Debian installiert Ihr dann die Headers wie folgt: <code><pre>apt-get install linux-headers-2.VERSIONSNUMMER</pre></code> Danach installiert Ihr die restlich benötigten Pakete mittels <code><pre>apt-get install build-essential subversion bison flex</pre></code> Die Crosscompiler-Umgebung installiert Ihr über einen SVN Checkout. Gebt dazu an der Konsole folgenden Befehl ein: <code><pre>svn co https://svn.nslu2-linux.org/svnroot/optware/trunk optware</pre></code> Das legt Euch ein neues Unterverzeichnis namens '''optware''' an. Als nächstes müssen wir die Compilerumgebung einrichten. Wechselt dazu in das Optwareverzeichnis: <code><pre>cd optware</pre></code> Danach folgender Befehl: <code><pre>make nslu2-target</pre></code> Jetzt wechselt ein Verzeichnis weiter: <code><pre>cd nslu2</pre></code> Dann noch ein <code><pre>make directories ipkg-utils</pre></code> Bevor nun letztendlich ein Programm kompilierbar wird müssen noch einige Copilertools nachgezogen werden. Hierzu stoßen wir einfach einen Kompile eines kleinen Tools an, dessen Makefile bereits mitgeliefert wurde. Stellt sicher, dass Ihr eine offene Internetverbindung habt. Gebt dann aus dem aktuellen '''/optware/nslu2/''' Verzeichnis folgenden Befehl ein: <code><pre>make htop</pre></code> Das kann dann durchaus eine Ecke dauern. Der Compile sollte fehlerfrei durchlaufen. Bricht dieser mit einer Error Meldung ab, dann fehlt in der Regel noch ein Installationspaket Eures Debian Systemes. In der Regel gibt die Fehlermeldung darüber Aufschluss, welches Paket noch zu installieren ist. Allerdings sollte dies in der Basisversion durchlaufen. <br /> <br /> Die Scripte um ein Paket zu installieren liegen im Unterverzeichnis '''/make'''. Vom Prinzip her ist in diesem Makefile der komplette Uübersetzungsvorgang hinterlegt. Hier werden ersteinmal die allgemeinen Daten des Maintainers hinterlegt. Dann muss genau festgelegt werden, von woher die Quelldateien des Programmes geladen werden sollen. Das Makefile zieht sich die Quellen aus dem Netz, hinterlegt diese in einem Buildverzeichnis und lässt dann den Compiler darüber laufen. Der Vorgang wird mit einem <code><pre>make makefile</pre></code> gestartet. Wenn der Buildvorgang durch ist wird dann das ipk Paket gebaut, das man dann auf die Slug kopieren und installieren kann: <code><pre>make makefile-ipk</pre></code> Das fertige Paket liegt dann unter '''/optware/nslu2/builds'''.<br /> Wenn Ihr also ein neues Programm kompilieren wollt schaut Euch ein einfaches Makefile aus dem Make-Vereichnis an, gleicht es an das neue Programm entsprechend an und speichert es als neues Makefile mit dem Namen des Programmes ab ( '''programmname.mk''' ).<br /> <br /> Ein Makefile, das ich für den Compile für den curl-ssl geschrieben habe sieht wie folgt aus (bitte '''NICHT''' als Vorlage verwenden, da die Formatiereung hier teilweise Zeilen umbricht!!!!): <code><pre>########################################################### # # curl-ssl # ########################################################### # You must replace "curl-ssl" and "CURL-SSL" with the lower case name and # upper case name of your new package. Some places below will say # "Do not change this" - that does not include this global change, # which must always be done to ensure we have unique names. # # CURL-SSL_VERSION, CURL-SSL_SITE and CURL-SSL_SOURCE define # the upstream location of the source code for the package. # CURL-SSL_DIR is the directory which is created when the source # archive is unpacked. # CURL-SSL_UNZIP is the command used to unzip the source. # It is usually "zcat" (for .gz) or "bzcat" (for .bz2) # # You should change all these variables to suit your package. # Please make sure that you add a description, and that you # list all your packages' dependencies, seperated by commas. # # If you list yourself as MAINTAINER, please give a valid email # address, and indicate your irc nick if it cannot be easily deduced # from your name or email address. If you leave MAINTAINER set to # "NSLU2 Linux" other developers will feel free to edit. # CURL-SSL_SITE=http://dev.myslug.de/curl CURL-SSL_VERSION=7.17.1 CURL-SSL_SOURCE=curl-ssl-$(CURL-SSL_VERSION).tar.gz CURL-SSL_DIR=curl-ssl-$(CURL-SSL_VERSION) CURL-SSL_UNZIP=zcat CURL-SSL_MAINTAINER=NSLU2 Version myslug.de CURL-SSL_DESCRIPTION=Download Manager CURL-SSL_SECTION=net CURL-SSL_PRIORITY=optional CURL-SSL_DEPENDS=openssl CURL-SSL_SUGGESTS= CURL-SSL_CONFLICTS= # # CURL-SSL_IPK_VERSION should be incremented when the ipk changes. # CURL-SSL_IPK_VERSION=1 # # CURL-SSL_CONFFILES should be a list of user-editable files # CURL-SSL_CONFFILES=/opt/etc/curl-ssl.conf /opt/etc/init.d/SXXcurl-ssl # # CURL-SSL_PATCHES should list any patches, in the the order in # which they should be applied to the source code. # # CURL-SSL_PATCHES=$(CURL-SSL_SOURCE_DIR)/configure.patch # # If the compilation of the package requires additional # compilation or linking flags, then list them here. # CURL-SSL_CPPFLAGS= CURL-SSL_LDFLAGS= # # CURL-SSL_BUILD_DIR is the directory in which the build is done. # CURL-SSL_SOURCE_DIR is the directory which holds all the # patches and ipkg control files. # CURL-SSL_IPK_DIR is the directory in which the ipk is built. # CURL-SSL_IPK is the name of the resulting ipk files. # # You should not change any of these variables. # CURL-SSL_BUILD_DIR=$(BUILD_DIR)/curl-ssl CURL-SSL_SOURCE_DIR=$(SOURCE_DIR)/curl-ssl CURL-SSL_IPK_DIR=$(BUILD_DIR)/curl-ssl-$(CURL-SSL_VERSION)-ipk CURL-SSL_IPK=$(BUILD_DIR)/curl-ssl_$(CURL-SSL_VERSION)-$(CURL-SSL_IPK_VERSION)_$(TARGET_ARCH).ipk .PHONY: curl-ssl-source curl-ssl-unpack curl-ssl curl-ssl-stage curl-ssl-ipk curl-ssl-clean curl-ssl-dirclean curl-ssl-check # # This is the dependency on the source code. If the source is missing, # then it will be fetched from the site using wget. # $(DL_DIR)/$(CURL-SSL_SOURCE): $(WGET) -P $(DL_DIR) $(CURL-SSL_SITE)/$(CURL-SSL_SOURCE) || \ $(WGET) -P $(DL_DIR) $(SOURCES_NLO_SITE)/$(CURL-SSL_SOURCE) # # The source code depends on it existing within the download directory. # This target will be called by the top level Makefile to download the # source code's archive (.tar.gz, .bz2, etc.) # curl-ssl-source: $(DL_DIR)/$(CURL-SSL_SOURCE) $(CURL-SSL_PATCHES) # # This target unpacks the source code in the build directory. # If the source archive is not .tar.gz or .tar.bz2, then you will need # to change the commands here. Patches to the source code are also # applied in this target as required. # # This target also configures the build within the build directory. # Flags such as LDFLAGS and CPPFLAGS should be passed into configure # and NOT $(MAKE) below. Passing it to configure causes configure to # correctly BUILD the Makefile with the right paths, where passing it # to Make causes it to override the default search paths of the compiler. # # If the compilation of the package requires other packages to be staged # first, then do that first (e.g. "$(MAKE) <bar>-stage <baz>-stage"). # # If the package uses GNU libtool, you should invoke $(PATCH_LIBTOOL) as # shown below to make various patches to it. # $(CURL-SSL_BUILD_DIR)/.configured: $(DL_DIR)/$(CURL-SSL_SOURCE) $(CURL-SSL_PATCHES) make/curl-ssl.mk # $(MAKE) <bar>-stage <baz>-stage rm -rf $(BUILD_DIR)/$(CURL-SSL_DIR) $(CURL-SSL_BUILD_DIR) $(CURL-SSL_UNZIP) $(DL_DIR)/$(CURL-SSL_SOURCE) | tar -C $(BUILD_DIR) -xvf - if test -n "$(CURL-SSL_PATCHES)" ; \ then cat $(CURL-SSL_PATCHES) | \ patch -d $(BUILD_DIR)/$(CURL-SSL_DIR) -p0 ; \ fi if test "$(BUILD_DIR)/$(CURL-SSL_DIR)" != "$(CURL-SSL_BUILD_DIR)" ; \ then mv $(BUILD_DIR)/$(CURL-SSL_DIR) $(CURL-SSL_BUILD_DIR) ; \ fi (cd $(CURL-SSL_BUILD_DIR); \ $(TARGET_CONFIGURE_OPTS) \ CPPFLAGS="$(STAGING_CPPFLAGS) $(CURL-SSL_CPPFLAGS)" \ LDFLAGS="$(STAGING_LDFLAGS) $(CURL-SSL_LDFLAGS)" \ ./configure \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_TARGET_NAME) \ --target=$(GNU_TARGET_NAME) \ --prefix=/opt \ --disable-nls \ --disable-static \ --with-ssl=/opt/bin/openssl \ ) $(PATCH_LIBTOOL) $(CURL-SSL_BUILD_DIR)/libtool touch $@ curl-ssl-unpack: $(CURL-SSL_BUILD_DIR)/.configured # # This builds the actual binary. # $(CURL-SSL_BUILD_DIR)/.built: $(CURL-SSL_BUILD_DIR)/.configured rm -f $@ $(MAKE) -C $(CURL-SSL_BUILD_DIR) touch $@ # # This is the build convenience target. # curl-ssl: $(CURL-SSL_BUILD_DIR)/.built # # If you are building a library, then you need to stage it too. # $(CURL-SSL_BUILD_DIR)/.staged: $(CURL-SSL_BUILD_DIR)/.built rm -f $@ $(MAKE) -C $(CURL-SSL_BUILD_DIR) DESTDIR=$(STAGING_DIR) install touch $@ curl-ssl-stage: $(CURL-SSL_BUILD_DIR)/.staged # # This rule creates a control file for ipkg. It is no longer # necessary to create a seperate control file under sources/curl-ssl # $(CURL-SSL_IPK_DIR)/CONTROL/control: @install -d $(@D) @rm -f $@ @echo "Package: curl-ssl" >>$@ @echo "Architecture: $(TARGET_ARCH)" >>$@ @echo "Priority: $(CURL-SSL_PRIORITY)" >>$@ @echo "Section: $(CURL-SSL_SECTION)" >>$@ @echo "Version: $(CURL-SSL_VERSION)-$(CURL-SSL_IPK_VERSION)" >>$@ @echo "Maintainer: $(CURL-SSL_MAINTAINER)" >>$@ @echo "Source: $(CURL-SSL_SITE)/$(CURL-SSL_SOURCE)" >>$@ @echo "Description: $(CURL-SSL_DESCRIPTION)" >>$@ @echo "Depends: $(CURL-SSL_DEPENDS)" >>$@ @echo "Suggests: $(CURL-SSL_SUGGESTS)" >>$@ @echo "Conflicts: $(CURL-SSL_CONFLICTS)" >>$@ # # This builds the IPK file. # # Binaries should be installed into $(CURL-SSL_IPK_DIR)/opt/sbin or $(CURL-SSL_IPK_DIR)/opt/bin # (use the location in a well-known Linux distro as a guide for choosing sbin or bin). # Libraries and include files should be installed into $(CURL-SSL_IPK_DIR)/opt/{lib,include} # Configuration files should be installed in $(CURL-SSL_IPK_DIR)/opt/etc/curl-ssl/... # Documentation files should be installed in $(CURL-SSL_IPK_DIR)/opt/doc/curl-ssl/... # Daemon startup scripts should be installed in $(CURL-SSL_IPK_DIR)/opt/etc/init.d/S??curl-ssl # # You may need to patch your application to make it use these locations. # $(CURL-SSL_IPK): $(CURL-SSL_BUILD_DIR)/.built rm -rf $(CURL-SSL_IPK_DIR) $(BUILD_DIR)/curl-ssl_*_$(TARGET_ARCH).ipk $(MAKE) -C $(CURL-SSL_BUILD_DIR) DESTDIR=$(CURL-SSL_IPK_DIR) install-strip install -d $(CURL-SSL_IPK_DIR)/opt/etc/ # install -m 644 $(CURL-SSL_SOURCE_DIR)/curl-ssl.conf $(CURL-SSL_IPK_DIR)/opt/etc/curl-ssl.conf install -d $(CURL-SSL_IPK_DIR)/opt/etc/init.d # install -m 755 $(CURL-SSL_SOURCE_DIR)/rc.curl-ssl $(CURL-SSL_IPK_DIR)/opt/etc/init.d/SXXcurl-ssl # sed -i -e '/^#!/aOPTWARE_TARGET=${OPTWARE_TARGET}' $(CURL-SSL_IPK_DIR)/opt/etc/init.d/SXXcurl-ssl $(MAKE) $(CURL-SSL_IPK_DIR)/CONTROL/control # install -m 755 $(CURL-SSL_SOURCE_DIR)/postinst $(CURL-SSL_IPK_DIR)/CONTROL/postinst # sed -i -e '/^#!/aOPTWARE_TARGET=${OPTWARE_TARGET}' $(CURL-SSL_IPK_DIR)/CONTROL/postinst # install -m 755 $(CURL-SSL_SOURCE_DIR)/prerm $(CURL-SSL_IPK_DIR)/CONTROL/prerm # sed -i -e '/^#!/aOPTWARE_TARGET=${OPTWARE_TARGET}' $(CURL-SSL_IPK_DIR)/CONTROL/prerm if test -n "$(UPD-ALT_PREFIX)"; then \ sed -i -e '/^[ ]*update-alternatives /s|update-alternatives|$(UPD-ALT_PREFIX)/bin/&|' \ $(CURL-SSL_IPK_DIR)/CONTROL/postinst $(CURL-SSL_IPK_DIR)/CONTROL/prerm; \ fi echo $(CURL-SSL_CONFFILES) | sed -e 's/ /\n/g' > $(CURL-SSL_IPK_DIR)/CONTROL/conffiles cd $(BUILD_DIR); $(IPKG_BUILD) $(CURL-SSL_IPK_DIR) # # This is called from the top level makefile to create the IPK file. # curl-ssl-ipk: $(CURL-SSL_IPK) # # This is called from the top level makefile to clean all of the built files. # curl-ssl-clean: rm -f $(CURL-SSL_BUILD_DIR)/.built -$(MAKE) -C $(CURL-SSL_BUILD_DIR) clean # # This is called from the top level makefile to clean all dynamically created # directories. # curl-ssl-dirclean: rm -rf $(BUILD_DIR)/$(CURL-SSL_DIR) $(CURL-SSL_BUILD_DIR) $(CURL-SSL_IPK_DIR) $(CURL-SSL_IPK) # # # Some sanity check for the package. # curl-ssl-check: $(CURL-SSL_IPK) perl scripts/optware-check-package.pl --target=$(OPTWARE_TARGET) $(CURL-SSL_IPK)</pre></code> Da hier erstmal wenn Ihr das Programm neu erzeugt im Scriptfile alle CURL-SSL und curl-ssl Strings auf Euer neues Programm umgeschrieben werden muss bietet es sich an, dies über einen sed Befehl unter Linux zu erledigen. Sonst besteht die Gefahr, dass Ihr irgendwo vergesst, den Namen zu ändern und damit das Script nicht funktioniert. Wir nehmen einmal an, dass das Script curl-ssl.mk in das Programm testi.mk umgebaut werden muss. D.h. folgende Strings können wir automatisiert abändern:<br /> <br /> curl-ssl --> testi<br /> CURL-SSL --> TESTI<br /> <br /> Der Befehl lautet hierzu (curl-ssl.mk liegt bereits im /make-Verzeichnis und Ihr befindet Euch nach wie vor unter /optware/nslu2). Zuerst kopieren wir curl.ssl.mk als neue Datei testi.mk: <code><pre>cp make/curl-ssl.mk make/testi.mk</pre></code> Dann genau aufpassen beim Eintippen: <code><pre>sed -i 's/CURL-SSL/TESTI/g' make/testi.mk sed -i 's/curl-ssl/testi/g' make/testi.mk</pre></code> Jetzt müsst Ihr nur noch den Rest des Files angleichen. Es wird nicht ausbleiben, dass Ihr den einen oder anderen Fehler zuerst bekommen werdet. Hier müsst Ihr viel probieren, bis Ihr durch das Prinzip des Makefiles steigt. Aber wer halbwegs Erfahrung damit hat, wird letztendlich schnell damit zurecht kommen.<br /> <br /> Crosskompiler auf Debian Etch in einer VirtualBox auf Windows Vista 64bit Ultimate:<br /> [[Bild:crosscompile.jpg]] [[Kategorie:NSLU2]] 46a9f1d378a066f66d8dd00303f3b30fdb909fb6 CURL Downloader 0 27 1003 36 2018-06-30T08:49:27Z Admin 1 wikitext text/x-wiki ==Große Downloads mit cURL== Unsere kleine Schnecke eignet sich natürlich auch wunderbar dafür, Daten aus dem Netz zu saugen, auch wenn wir mal nicht an einem Rechner sitzen. Große Files werden dann einfach über nacht von der kleinen Box selbständig gezogen und das verbraucht natürlich deutlich weniger Strom, als wenn wir das an unserer big Machine erledigen. Gerade ist beispielsweise das neue Debian Etch 4.0 erschienen. Diese Distribution kann man entweder auf über 20 CDs aus dem Netz saugen oder auch wahlweise als eine DVD Ausgabe, die sich über satte drei Scheiben erstreckt und schonmal ein Downloadvolumen von rund 12GB hat. Ein einfaches wget stößt dann schon bei 2GB an seine Grenzen. Dann muss einfach etwas mächtigeres her. Hierfür bietet sich das Kommandozeilen-Tool Curl [http://curl.haxx.se/] an, das auch mehrere Jobs hintereinander erledigen kann. Leider gibt es für die Slug selbst keine fertige Version, sodass wir hier selbst Hand anlegen müssen. Aber auch dies soll uns nicht davor abschrecken, das Tool einzusetzen. Als erstes müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen): <code><pre>ipkg install optware-devel</pre></code> Zuerst modifizieren wir die /etc/profile, damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. Jetzt legen wir ein Arbeitsverzeichnis an: <code><pre>mkdir work</pre></code> und wechseln gleich dort hin: <code><pre>cd work</pre></code> Nun saugen wir uns den Quellcode (noch mit wget): <code><pre>wget http://curl.haxx.se/download/curl-7.16.2.tar.gz</pre></code> Nun packen wir den Code aus: <code><pre>tar -zvxf curl-7.16.2.tar.gz</pre></code> Daraufhin entsteht ein neues Verzeichnis in das wir gleich wechseln: <code><pre>cd curl-7.16.2</pre></code> Und schon können wir loslegen: <code><pre>./configure --prefix=/opt</pre></code> Das bereitet uns den Quellcode vor und stellt sicher, dass alle Files in den Standardpfad für neue Anwendungen der NSLU2 landen. Da unsere Schnecke nicht die schnellste ist, kann das durchaus eine Weile dauern, bis das Konfigurationsscript durch ist. Der Kompile wird dann mit einem <code><pre>make</pre></code> angestoßen. Auch das wird sich einwenig hinziehen. Danach installiert Ihr alles mit einem <code><pre>make install</pre></code> Nun können wir uns als root abmelden und melden uns als ein normaler User wieder an. Danach starten wir einen Testdownload, der beispielsweise so aussehen kann: <code><pre>curl -C - -O http://laotzu.acc.umu.se/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso</pre></code> Weitere Links werden einfach mit einem weiteren '''-O''' angehängt, dann arbeitet Curl die Downloads der Reihe nach ab. Jetzt haben wir natürlich noch das Problem, dass beim Ausloggen aus der telnet- oder ssh- Session der curl-Prozess wieder abbricht. Um das zu verhindern, müssen wir den Prozess abkoppeln. Das erledigen wir einfach, indem wir den Befehl '''nohup''' (no hangup) vor unserem curl - Befehl stellen. Allerdings schreibt uns der nohup Befehl den kompletten Statistik- Output in eine Log-Datei (nohup.out). Das macht vielleicht bei Programmen Sinn, bei denen wir auf eine spezielle Anzeige warten (beim Kompilieren oder einen Virenscann etc.) . Bei einer Downloadstatistik bekommen wir mal schnell ein paar MB zusammen, was wir nicht unbedingt haben wollen. Also stellen wir noch hinter den curl- Befehl den Parameter '''--silent''' . Somit sieht der komplette Befehl wie folgt aus: <code><pre>nohup curl -C - -O http://laotzu.acc.umu.se/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso --silent</pre></code> Zum Test können wir uns nach dem Start des Downloads ausloggen und als anderer User (root) einloggen. Dort kontrollieren wir mittels '''htop''' ob der Prozess noch läuft: <div style="float:right;text-align:center;padding-left:20px"> [[Bild:slug11.jpg]] </div> Perfekt! Hier sehen wir, dass curl ganz oben munter werkelt und ordentlich CPU Last verursacht. Das lag allerdings in meinem Beispiel nur daran, dass ich den --silent Mode nicht verwendete und dabei noch kräftig in die Log-Datei geschrieben wurde. Normal benötigt der curl bei solch einer Tätigkeit um die 15% CPU Last. Alternativ kann man natürlich auch den curl zeitgesteuert loslafen lassen. Dazu legt den Befehl (ohne nohup) in ein bash-script und ruft diesen über einen cron-job zur gewünschten Zeit auf. So kann der große Download auch mitten in der Nacht loslegen, wenn ihr die volle Bandbreite Eurer Internet-Verbindung eh nicht benötigt. [[Kategorie:NSLU2]] ccb895a2d142daf33cd8770d9b49e30d1bfbd694 Firefly mp3 Server 0 29 1004 38 2018-06-30T08:49:39Z Admin 1 wikitext text/x-wiki ==MP3 Server mit Firefly== MP3s im heimischen Netz streamen? Na kein Problem. Mittels dem daap- Server Firefly [http://www.fireflymediaserver.org/] kann Eure MP3 in Eurem Netz verfügbar gemacht werden. Ob am lokalen Rechner, am Laptop via WLan oder mittels dafür geeignete/kompatible Standalonegeräte, die Slug sorgt für genug Futter. Zunächst legt über Eure Webadmin-Konfiguration einen neuen User für Eure Musik an ( mp3 oder musik etc.) . Dieser sollte ausschließlich als Samba Share verwaltet werden und '''keinesfalls''' für einen FTP-Zugriff im Internet freigegeben werden. Sollte von außen auf Eure mp3 Sammlung ein Zugriff möglich sein, dann sind schlimmste Probleme vorprogrammiert! In unserem Beispiel nennen wir ihn musik. Dementsprechend hat er als Heimatverzeichnis das Verzeichnis '''/musik'''. Der Server selbst ist sehr schnell installiert. Hierzu loggt Euch auf Eure Slug ein und führt folgende Befehle zur Installation aus: <code><pre>ipkg update ipkg install mt-daapd</pre></code> Nun müssen wir die Konfigurationsdatei editieren: <code><pre>vi /opt/etc/mt-daapd/mt-daapd.conf</pre></code> Folgende Zeilen sind interessant: <code><pre>[...] port 3689 (Standard, kann geändert werden, muss aber nicht) [...] admin_pw beliebiges Administratorpasswort (WICHTIG!) [...] mp3_dir /musik (Das Verzeichnis für die Musikdateien) [...]</pre></code> Das war es im Grunde auch schon. Speichert Eure Änderung ab und startet den Server neu: <code><pre>/opt/etc/init.d/S60mt-daapd</pre></code> Wenn Ihr eine Logdatei mitlaufen lassen wollt müsst Ihr hierfür wieder die Konfig bearbeiten: <code><pre>vi /opt/etc/mt-daapd/mt-daapd.conf</pre></code> Ändert die Zeile <code><pre># logfile /var/log/mt-daapd.log</pre></code> in <code><pre>logfile /var/log/mt-daapd.log</pre></code> um. Legt dann noch eine leere Logdatei an: <code><pre>touch /var/log/mt-daapd.log</pre></code> Auch für diese Änderung muss der Server neu gestartet werden: <code><pre>/opt/etc/init.d/S60mt-daapd</pre></code> Die Logdatei könnt Ihr Euch dann an der Konsole mittels <code><pre>tail -f /var/log/mt-daapd.log</pre></code> ansehen. Ladet nun eine Test-mp3 auf Euer Musikverzeichnis und startet den Webadmin (mit dem in Eurer Config festgelegtem Port) in Eurem Webbrowser: <code><pre>http://[IP-Nummer der Slug]:3689</pre></code> Meldet Euch dann mit dem Usernamen admin mit Eurem Passwort an Klickt nun auf "'''status'''" : [[Bild:slug12.png|center]] Klickt dann auf Start Scan, damit Eure Dateien eingelesen werden. Kurz darauf sollte die Anzahl der auf dem Server geladenen Dateien angezeigt werden. Mittels einem geigneten Programm (iTunes, Amarok um nur zwei zu nennen) können nun die Musikdateien abgespielt werden. <br /> <br /> <br /> ===Hier ein kurzes Beispiel, wie der Amarok unter Linux dafür konfiguriert wird=== Startet dazu Euren Amarok [http://amarok.kde.org/de]: [[Bild:slug13.png|center]] Dann klickt auf "'''Einstellungen -> Amarok einrichten ...'''" Dann links auf "'''Media-Player'''" und "'''Gerät hinzufügen'''". Im Dropdownmenü wählt Ihr Musikfreigabe aus und vergebt einen beliebigen Namen: [[Bild:slug14.png|center]] Ihr beendet das kleine Menü mit '''OK''' und schließt das Konfigurationsfenster mit "'''Anwenden'''". Danach könnt Ihr im Dropdownmenü oben links das Gerät "'''Freigegebene Musik'''" auswählen und klickt auf den kleinen Pfeil rechts neben den Buttons Verbinden/Trennen (rot markiert): [[Bild:slug15.png|center]] Nun müsst Ihr die IP Eures Rechners im Netz mit dem DAAP Server eingeben. Den Port stellt falls nötig gemäß Eurer Serverkonfiguration ein: [[Bild:slug16.png|center]] Das dann auch mit '''OK''' beenden. Klickt nun auf '''Verbinden'''. Danach solltet in der Liste darunter Euer Server auftauchen (IP) und Eure MP3s gelistet werden. Jetzt könnt Ihr anfangen, Eure Musikauswahl zu starten. [[Kategorie:NSLU2]] 33eac77d71b7c6fc206050831f7981571f7d0e91 Firewalling 0 35 1005 335 2018-06-30T08:49:55Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Firewall mit Fail2ban== Wer im Netz einen Webserver betreibt, der wird sich immer wieder Attacken gegen seinen Server ausgesetzt fühlen. Das sind nicht oft gezielte Angriffe, sondern eher Suchmachanismen, die an diversen Standardports herausfinden, ob diverse Dienste wie http oder ssh freigegeben sind. An solchen freigegeben Ports werden dann entsprechende Einbruchsversuche gestartet. Dies geschieht über verschiedene Wege. Die einfachste aber am häufigsten verwendete Methode ist der sogenannte Brute Force Angriff. Hier versucht der Angreifer mittels vorgefertigter Passwortlisten das korrekte Passwort zu erraten. Dabei werden anhand dieser Liste Logins solange probiert, bis das passende Passwort gefunden ist. Ähnliches kann natürlich auch am FTP Server passieren. Dieses Tutorial soll nun eine Möglichkeit aufzeichnen, solchen Brut Force Attacken zu begegnen und zusätzlich die NSLU2 über ein Firewall-Script soweit abzudichten, bis eben auf die für die NSLU2 benötigten Ports. Das Tutorial soll allerdings keinesfalls eine falsche Sicherheit vorgaukeln. Eine Firewall und eine IP Falle, wie wir sie im nachfolgenden Text über das Programm Fail2Ban realisieren werden kann nur eine gewisse Sicherheit bieten. Wichtig ist zudem weiterhin, seine Log-Dateien regelmäßig im Auge zu behalten und auch zu kontrollieren, welche Dateien sich auf der Büchse befinden. Bekommen die Dateien ungebetenen Zuwachs, dann ist wohl der ftp-Server geknackt worden. Das von mir verfasste Tutorial fasst einige Arbeitsschritte zusammen, die für sich betrachtet auch noch ausbaufähig sind. Aufgrund der Komplexität des Themas kann dies auch nicht wirklich vollständig sein und stellt in dieser Hinsicht eine Art Grundgerüst dar, auf dass freilich weiter aufgebaut werden kann. Da das Konfigurieren einer Firewall nicht wirklich trivial ist sei noch gesagt: Bevor Ihr irgendwelche Scripte automatisiert, startet diese IMMER erst manuell und testet die Funktionalität der Scripte. Sperrt Ihr Euch aus Versehen durch eine Falschkonfiguration aus und die Scripte werden nach einem Reboot automatisch gestartet, weil diese bereits in den Initscripten integriert wurden habt Ihr wenig bis gar keine Chance mehr, auf Eure Büchse zu kommen. Hier muss das Gerät dann wieder mit einer frischen Firmware geflasht werden und Ihr könnt das Gerät wieder von vorne neu einrichten. Ziel dieses Tutorials ist es nun, eine IP Falle mit dem Programm Fail2Ban [http://www.fail2ban.org/wiki/index.php/Main_Page] zu installieren. Mittels dieser "Falle" können Loginversuche limitiert werden. IP-Nummern über die nun versucht wird, ein Passwort zu erraten, werden nach einer vordefinierten Anzahl von Fehlversuchen einfach gesperrt. Die Sperre wird dann nach einer gewissen Zeit wieder aufgehoben. Hierbei empfiehlt sich eine Sperre von mehreren Tagen, damit der Versuch, einen Einbruch über eine Passwortliste zu unternehmen ad Absurdum führt. Zudem sollen Einbruchsversuche uns per E-Mail gemeldet werden. Zum Schluss wollen wir noch eine Firewall für die restlichen Ports unseres Servers einrichten. Also lest alles in Ruhe durch, nehmt Euch Zeit für Euer Projekt, dann werdet Ihr denke ich auch eine Menge Spaß dabei haben! <br /> <br /> <br /> ==Basis Pakete installieren== Zuerst sollten wir - falls nicht schon aufgrund meiner vorangegangenen Tutorials geschehen - die NSLU2 durch die Entwicklerpakete ergänzen, damit wir bei Bedarf etwas kompilieren können: <code><pre>ipkg install optware-devel ipkg install python python24</pre></code> Danach modifizieren wir die /etc/profile, damit wir einen sauberen Kompile hinbekommen: <code><pre>vi /etc/profile</pre></code> Ergänzt dann folgende Zeilen und speichert die Datei ab: <code><pre>export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:. export LD_LIBRARY_PATH=/opt/lib</pre></code> Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden. <br /> <br /> <br /> ==Syslog ändern== Damit wir ein paar mehr wichtige Informationen wie eben auch die Sicherheitsmeldungen des openssh Servers geliefert bekommen, müssen wir den bisherigen Syslog Dämonen durch einen anderen ersetzen. Dies ist schnell erledigt! Zuerst das neue Syslogpaket installieren <code><pre>ipkg install syslog-ng</pre></code> Danach in '''/etc/inittab''' folgende Zeilen auskommentieren: <code><pre># slog:unknown:/sbin/syslogd -n # klog:unknown:/sbin/klogd -n</pre></code> Alte Logdaemons abschießen: <code><pre>killall syslogd killall klogdSyslog</pre></code> dann mit <code><pre>/opt/etc/init.d/S01syslog-ng</pre></code> starten. Beim nächsten Reboot wird das Programm automatisch gestartet. Damit die Logdateien nicht auf Dauer zu groß werden und eventuell gerade bei der Verwendung von etwas knapp bemessenen USB-Sticks zu vollen Datenspeichern zu führen, empfehle ich die Verwendung des logrotate. Dieser sorgt dafür, dass die schnell wachsenden System-Logs in separaten gepackten Dateien gespeichert werden und die aktuelle Log-Datei heruntergekürzt werden. Dies geschieht rotierend, d.h. die gepackten Dateien werden durchnummeriert und die älteste jeweils gelöscht. Hierzu installiert bitte den logrotate mit folgendem Befehl: <code><pre>ipkg install logrotate</pre></code> Jetzt editiert die '''/opt/etc/logrotate.conf''' mit dem <code><pre>vi /opt/etc/logrotate.conf</pre></code> und ändert diese wie folgt ab: <code><pre>compress /opt/var/log/messages opt/var/log/syslog opt/var/log/kern.log opt/var/log/debug { rotate 5 postrotate /bin/killall syslogd /bin/killall klogd /bin/killall -HUP syslog-ng endscript } include /opt/etc/logrotate.d</pre></code> rotate 5 bedeutet, dass Ihr 5 Sicherungen bekommt, bis die älteste bei der 6. Sicherung gelöscht wird. Damit das auch automatisiert funktioniert, editiert Eure crontab: <code><pre>vi /etc/crontab</pre></code> und fügt folgende Zeile ein: <code><pre>30 23 * * 6 root /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null</pre></code> Das löst jeden Samstag um 23:30 Uhr eine Bereinigung der Logfiles aus. Somit habt Ihr die Files zumindest 5 Wochen zur Verfügung, solltet Ihr irgendwelchen Unregelmäßigkeiten auf die Spur kommen wollen. Die gepackten Dateien befinden sich dann unter '''/opt/var/log''' und können mit dem Midnight Commander beispielsweise eingesehen werden. <br /> <br /> <br /> ==Iptables / Firewall installieren== Bevor wir uns nun an das Eingemachte machen können, müssen wir noch diverse Kernelmodule nachinstallieren. Dann kommen die iptables dran, mit denen wir im weiteren Verlauf des Tutorials noch viel Freude haben werden. Folgende 4 Pakete werden nun installiert: <code><pre>ipkg install kernel-module-ip-tables -force-depends ipkg install kernel-module-iptable-filter -force-depends ipkg install kernel-module-ipt-log ipkg install iptables</pre></code> Startet nun sicherheitshalber Eure Slug neu, damit alles sauber initialisiert wird. <br /> <br /> <br /> ==Erweiterung der Firewall mit IPTABLES== Wer seine Slug noch weiter abdichten möchte, der kann hier mit einem sehr guten Script arbeiten, dass man auf der NSLU2-Linux.org findet. Dieses fügt weitere Regeln hinzu und sperrt die Ports. Wobei Standarddienste wie der ftp und der http Server offen bleiben. Sollen weitere Ports geöffnet werden, so muss das in dem folgenden Script hinterlegt werden. Jetzt ein Firewallscript anlegen: <code><pre>touch /opt/etc/iptables.sh</pre></code> Das machen wir ausführbar: <code><pre>chmod +x /opt/etc/iptables.sh</pre></code> Dann füllen wir den Inhalt mit folgender ausgezeichneten Firewallregel, welches ich auf der nslu2-linux.org gefunden habe (Link folgt nach dem Script): <code><pre>#!/bin/sh ############################################################################### # # Local Settings # # IPTables Location - adjust if needed IPT="/opt/sbin/iptables" IPTS="/opt/sbin/iptables-save" IPTR="/opt/sbin/iptables-restore" # Internet Interface INET_IFACE="ixp0" # Path to iptables modules IPT_MODPATH="/lib/modules/2.4.22-xfs/kernel/net/ipv4/netfilter" # CHANGE THIS TO MATCH YOUR SLUG IP ADDRESS # currently not used INET_ADDRESS="10.0.0.123" # Localhost Interface LO_IFACE="lo" LO_IP="127.0.0.1" # Save and Restore arguments handled here if [ "$1" = "save" ] then echo -n "Saving firewall to /etc/sysconfig/iptables ... " $IPTS > /opt/etc/iptables echo "done" exit 0 elif [ "$1" = "restore" ] then echo -n "Restoring firewall from /etc/sysconfig/iptables ... " $IPTR < /opt/etc/iptables echo "done" exit 0 fi # Load Modules echo "Loading kernel modules ..." insmod $IPT_MODPATH/ip_tables.o insmod $IPT_MODPATH/iptable_filter.o # if you need logging, uncomment line above # (be aware you have installed the kernel-module-ipt-log #insmod $IPT_MODPATH/ipt_LOG.o # Flush Any Existing Rules or Chains echo "Flushing Tables ..." # Reset Default Policies $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT # Flush all rules $IPT -F # Erase all non-default chains $IPT -X if [ "$1" = "stop" ] then echo "Firewall completely flushed! Now running with no firewall." exit 0 fi ############################################################################### # Rules Configuration # Filter Table # Set Policies $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP # User-Specified Chains echo "Create and populate custom rule chains ..." # Create a chain to filter INVALID packets $IPT -N bad_packets # Create another chain to filter bad tcp packets $IPT -N bad_tcp_packets # Create separate chains for icmp, tcp (incoming and outgoing), # and incoming udp packets. $IPT -N icmp_packets # Used for UDP packets inbound from the Internet $IPT -N udp_inbound # Used to block outbound UDP services from internal network # Default to allow all $IPT -N udp_outbound # Used to allow inbound services if desired # Default fail except for established sessions $IPT -N tcp_inbound # Used to block outbound services from internal network # Default to allow all $IPT -N tcp_outbound # Populate User Chains # bad_packets chain # Drop INVALID packets immediately # needs conntrack #$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP # Then check the tcp packets for additional problems $IPT -A bad_packets -p tcp -j bad_tcp_packets # All good, so return $IPT -A bad_packets -p ALL -j RETURN # bad_tcp_packets chain # # All tcp packets will traverse this chain. # Every new connection attempt should begin with # a syn packet. If it doesn't, it is likely a # port scan. This drops packets in state # NEW that are not flagged as syn packets. # needs conntrack #$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \ #--log-prefix "New not syn: " #$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP # Stealth scans $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # All good, so return $IPT -A bad_tcp_packets -p tcp -j RETURN # icmp_packets chain # ICMP packets should fit in a Layer 2 frame, thus they should # never be fragmented. Fragmented ICMP packets are a typical sign # of a denial of service attack. #$IPT -A icmp_packets --fragment -p ICMP -j LOG \ #--log-prefix "ICMP Fragment: " $IPT -A icmp_packets --fragment -p ICMP -j DROP # Echo - uncomment to allow your system to be pinged. # Uncomment the LOG command if you also want to log PING attempts # # $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG \ # --log-prefix "Ping detected: " $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT # comment out above and uncomment below to drop pings without logging. #$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP # see ping reply packets $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT # Time Exceeded $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # Not matched, so return so it will be logged $IPT -A icmp_packets -p ICMP -j RETURN # TCP & UDP # Identify ports at: # http://www.chebucto.ns.ca/~rakerman/port-table.html # http://www.iana.org/assignments/port-numbers # # ADD UDP-based services here # # udp_inbound chain # ports you want to accept udp packets on # netbios/samba $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j ACCEPT # Network Time Protocol (NTP) Server $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT # External DHCP Server # Allow DHCP client request packets inbound from external network $IPT -A udp_inbound -p UDP -s 0/0 --source-port 68 --destination-port 67 -j ACCEPT # DNS in #$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT $IPT -A udp_inbound -p UDP -s 0/0 --source-port 53 -j ACCEPT # Not matched, so return for logging $IPT -A udp_inbound -p UDP -j RETURN # udp_outbound chain # ports you send udp packets to # netbios/samba $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 138 -j ACCEPT # Network Time Protocol (NTP) Server $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT # DHCP out $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 68 -j ACCEPT # DNS out $IPT -A udp_outbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT # No match, so ACCEPT # make this DROP if you want to block any other outbound udp traffic $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT # tcp_inbound chain # # This chain is used to allow inbound connections to the SLUG # smb $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 137 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 139 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 445 -j ACCEPT # HTTP $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT # FTP $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port ftp -j ACCEPT # Passive $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 33201:33210 -j ACCEPT # DNS $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT # sshd $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT # telnet $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 23 -j ACCEPT # Not matched, so return so it will be logged $IPT -A tcp_inbound -p TCP -j RETURN # tcp_outbound chain # # This chain controlls what tcp traffic is allowed out # http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT # DNS $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT # sshd $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT # No match, so ACCEPT # Note, you could make this DROP to block any other outbound traffic $IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT ############################################################################### # INPUT Chain echo "process INPUT chain ..." # Allow all on localhost interface $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT # Drop bad packets $IPT -A INPUT -p ALL -j bad_packets # ****************************** # Inbound Internet Packet Rules # Accept Established Connections # Needs conntrack module # $IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # packet filter accepts inbound packets that are replies to an outbound connection # use until conntrack is available # this blocks all new connection attempts except to those allowed below $IPT -A INPUT -p TCP -i $INET_IFACE ! --syn -j ACCEPT # Route the rest to the appropriate user chain $IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound $IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound $IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets # Drop without logging broadcasts that get this far. # Comment this line if testing new rules that impact # broadcast protocols. #$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP ############################################################################### # # OUTPUT Chain # echo "Process OUTPUT chain ..." # Generally trust the firewall on output # However, invalid icmp packets need to be dropped # to prevent a possible exploit. # needs conntrack #$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP # Localhost $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT # If you want to block outbound connections, uncomment first section below, comment # out second section, and add rules to tcp_outbound/udp_outbound # To internet - filtered #$IPT -A OUTPUT -p TCP -o $INET_IFACE -j tcp_outbound #$IPT -A OUTPUT -p UDP -o $INET_IFACE -j udp_outbound # To internet (unfiltered) $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT</pre></code> ( Das Script und einen Download findet Ihr unter folgender Adresse NSLU2-Linux - HowTo / EnableFirewall [http://www.nslu2-linux.org/wiki/HowTo/EnableFirewall] ) Gestartet wird die Firewall mit <code><pre>/opt/etc/iptables.sh</pre></code> Anhalten mit <code><pre>/opt/etc/iptables.sh stop</pre></code> Um die Firewall bei jedem Start automatisch zu aktivieren müssen wir einen Link anlegen: <code><pre>ln -s /opt/etc/iptables.sh /opt/etc/init.d/S30iptables</pre></code> Ihr werdet hier jetzt bemerken, dass z.B. Euer Webadmin geblockt ist, weil dieser nicht auf dem Port 80 liegt, sondern einem anderen, den Ihr bereits in der Vergangenheit zugewiesen habt. Um nun den http auch für einen zweiten Port freizugeben ergänzt das Script durch zwei neue Regeln, die Ihr am besten unter die bisherige Port 80 Regel setzt. Sucht dazu folgende Zeilen im Script: <code><pre># http $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT</pre></code> Diese erweitert Ihr folgendermaßen, wenn Ihr Eurem Webadmin z.B. den Port 9055 zugewiesen habt: <code><pre># http $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 9055 -j ACCEPT</pre></code> Das gleiche für den Outbound: <code><pre># http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT</pre></code> in <code><pre># http $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 9055 -j ACCEPT</pre></code> Wenn Ihr z.B. den Firefly MP3 Server installiert habt, dann benötigt dieser auch einen freien Port auf 3689 beispielsweise (je nachdem, wie Ihr ihn konfiguriert habt). Gebt diesen Port frei, indem Ihr direkt bei den Portfreigaben im Script folgende Zeilen ergänzt: <code><pre># MT-DAAP $IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 3689 -j ACCEPT $IPT -A INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT $IPT -A OUTPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT</pre></code> Die IP 224.0.0.251 ist eine Multicast-Adresse, die hier Apples i-Tunes zum Rendezvous auf dem Port 5353 benötigt. Wird dieser geblockt findet der i-Tunes den NSLU2 Firefly Media Server nicht mehr im Netz. Zum Schluss muss noch die '''/opt/etc/vsftpd.conf''' editiert werden, damit der passive Modus des vsftp FTP Server funktioniert und eine Verbindung wieder möglich wird. Ergänzt nun am Ende der '''vsftp.conf''' folgende Zeilen: <code><pre># for our firewall, only use this range of ports pasv_min_port=33201 pasv_max_port=33210</pre></code> <br /> <br /> <br /> ==Fail2ban installieren und konfigurieren== Zuerst benötigen wir ein Arbeitsverzeichnis. Das legen wir in dem Rootverzeichnis an: <code><pre>mkdir work</pre></code> Dann wechseln wir nach work <code><pre>cd /work</pre></code> Danach laden wir uns Fail2ban herunter: <code><pre>wget http://downloads.sourceforge.net/fail2ban/fail2ban-0.8.3.tar.bz2?modtime=1216338691&big_mirror=0</pre></code> Nun entpacken wir das Programm: <code><pre>tar xvfj fail2ban-0.8.3.tar.bz2</pre></code> Das erstellt uns ein neues Verzeichnis fail2ban-0.8.3 . Hier wechseln wir hinein: <code><pre>cd fail2ban-0.8.3</pre></code> Das wird dann mit <code><pre>python2.4 setup.py install</pre></code> installinstalliert. Die wichtigen Dateien: Die ausführbare Datei '''fail2ban-client''' liegt unter '''/opt/local/bin''' . Die dazugehörige Konfigurationsdatei '''jail.conf''' ist dann unter '''/etc/fail2ban''' zu finden, die dann noch editiert werden muss. Öffnet nun die /etc/fail2ban/jail.conf und sucht nach folgender Sektion, um den ssh einzustellen: <code><pre>[ssh-iptables] enabled = false filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /var/log/sshd.log maxretry = 5</pre></code> Ich habe die z.B. wie folgt eingestellt: <code><pre>[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /opt/var/log/auth.log maxretry = 3 bantime = 3600</pre></code> Das bedeutet hier, dass beim Versuch via ssh sich einzuwählen beim dritten falschen Login ( maxretry = 3) die IP für eine Stunde ( bantime = 3600 ; wird in Sekunden angegeben) gesperrt ist. Das kann man natürlich je nach Gusto anpassen. Vergesst nicht, das '''enabled = false''' auf '''true''' umzustellen, damit der Dienst hier aktiviert wird. Das Gleiche dann für unseren FTP Server (vsftp): <code><pre>[vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] mail-whois[name=VSFTPD, dest=yourmail@mail.com] logpath = /opt/var/log/vsftpd.log maxretry = 5 bantime = 600</pre></code> in <code><pre>[vsftpd-iptables] enabled = true filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] mail-whois[name=VSFTPD, dest=yourmail@mail.com] logpath = /opt/var/log/vsftpd.log maxretry = 5 bantime = 3600</pre></code> Hier erhöhen wir die Sperrdauer auf 1 Stunde und aktivieren den Dienst mit '''enable = true''' . Speichert die Änderungen und startet nun den fail2ban indem Ihr zuerst mit <code><pre>cd /opt/local/bin</pre></code> in das korrekte Verzeichnis wechselt und dann <code><pre>./fail2ban-client start</pre></code> eingebt. Nach erfolgreichen Start seht Ihr folgende Message: '''2007-05-04 00:35:59,100 fail2ban.server : INFO Starting Fail2ban''' Um zu sehen, ob auch die Dienste soweit online sind, setzt folgenden Befehl ab: <code><pre>/opt/local/bin/fail2ban-client status</pre></code> Der Output sollte folgender sein: '''Status |- Number of jail: 2 `- Jail list: ssh-iptables, vsftpd-iptables''' Jetzt checken wir noch die IP Tables ob hier die korrekten Eintragungen vom fail2ban vorgenommen wurden: <code><pre>iptables -L -v</pre></code> Überprüft die Zeilen nun nach folgendem Output: '''0 0 fail2ban-VSFTPD tcp -- any any anywhere anywhere tcp dpt:ftp 181 16496 fail2ban-SSH tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT all -- lo any anywhere anywhere''' Jetzt ist alles roger. Lasst Euch nun die Logfile des fail2ban anzeigen: <code><pre>tail -f /var/log/fail2ban.log</pre></code> Versucht Euch nun mit einem FTP Client einzuwählen und gebt bewusst ein falsches Passwort ein. Wenn Alles gut läuft, bekommt der FTP Client nach dem 5. Versuch keinen Connect mehr. Die Logdatei zeigt dann folgende Zeile: <code><pre>2007-05-04 00:45:27,847 fail2ban.actions: WARNING [vsftpd-iptables] Ban 192.168.0.2 2007-05-04 00:45:28,775 fail2ban.actions.action: ERROR echo -en "Hi,\n The IP 192.168.0.2 has just been banned by Fail2Ban after 5 attempts against VSFTPD.\n\n Here are more information about 192.168.0.2:\n `whois 192.168.0.2`\n Regards,\n Fail2Ban"|mail -s "[Fail2Ban] VSFTPD: banned 192.168.0.2" yourmail@mail.com returned 7f00</pre></code> Hier seht Ihr, dass die IP gesperrt wurde. Wenn Ihr das ausprobiert solltet Ihr vorher vielleicht erstmal die Bandauer auf 60 Sekunden stellen, damit Ihr nicht ewig warten müsst, bis Ihr ge-unbant werdet: <code><pre>2007-05-04 00:46:28,196 fail2ban.actions: WARNING [vsftpd-iptables] Unban 192.168.0.2</pre></code> Natürlich kann man auch, um sich selbst nicht aus Versehen auszusperren, seine eigene IP aus der Überwachung herausnehmen und in der '''/etc/fail2ban/jail.conf''' in die Zeile '''ignoreip''' eintragen. Damit unser Filter auch beim nächsten Boot automatisch startet legen wir jetzt ersteinmal ein Script an: <code><pre>vi /opt/bin/iptrap</pre></code> Das füllen wir mit folgendem Script, das ich einmal kurz zusammengeschrieben habe: <code><pre>#!/bin/bash # Bootscript fuer den fail2ban Client case "$1" in start) rm /tmp/fail2ban.sock rm /var/run/fail2ban/fail2ban.sock echo "Starting IP Trap..." exec /opt/local/bin/fail2ban-client start ;; stop) echo "Stopping IP Trap... leaving machine wide open now ..." exec /opt/local/bin/fail2ban-client stop ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac</pre></code> Damit diese ausführbar ist, fügen wir das Executable Flag dazu: <code><pre>chmod +x /opt/bin/iptrap</pre></code> Diese kommt nun zu unseren init-Scripten: <code><pre>ln -s /opt/bin/iptrap /opt/etc/init.d/S35iptrap</pre></code> Jetzt können wir die Kiste neu starten und hoffen, dass wir ein Stückchen sicherer geworden sind: <code><pre>sync reboot</pre></code> <br /> <br /> <br /> ==Meldung per E-Mail== Damit wir nicht immer regelmäßig die Log-Datei nach Sperrungen durchsuchen zu müssen, gibt es einen sehr komfortablen Weg, sich die Sperrungen per E-Mail zusenden zu lassen. Dabei ist es sogar möglich, gleich eine '''whois''' Abfrage zu starten und das Ergebnis in die Mail zu schreiben. Hierzu muss der Mailer '''nail''' und whois installiert werden: <code><pre>ipkg install nail ipkg install whois</pre></code> Danach verknüpfen wir das Programm nail mit dem Programmaufruf mail, weil die ganzen Scripte ein "mail" anstatt "nail" erwarten: <code><pre>ln -s /opt/bin/nail /opt/bin/mail</pre></code> Jetzt müssen wir noch unseren smtp Server und Absender festlegen. Dazu müssen wir unter dem Heimatverzeichnis von /root die Datei .mailrc anlegen. Am besten mit vi aufmachen: <code><pre>vi .mailrc</pre></code> und folgende Zeilen eingeben (entsprechend Euren Server/Absender abändern): '''set smtp=smtp. euerserver. de'''<br /> '''set from=meine @mail. blah''' Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen: '''set smtp-auth-user=Loginname'''<br /> '''set smtp-auth-password=Passwort''' Da hier das Passwort in klar lesbarer Form in der '''.mailrc''' hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben. Nun müssen wir noch Eure Empfängeradresse festlegen und diverse Einstellungen vornehmen. Hierzu öffnet wieder die '''/etc/fail2ban/jail.conf''' und ändert in jedem Abschnitt, den Ihr auf "'''true'''" gesetzt habt die Platzhalter Adresse '''dest=yourmail @mail. com''' entsprechend Eurer gewünschten Empfängeradresse um. Ebenso schreibt das '''sendmail-whois''' in '''mail-whois''' um. Dann fügt noch folgende Zeilen unter die Zeile '''findtime = 600''' ein: <code><pre>mta = mail action = %(action_mwl)s</pre></code> Seit fail2ban 0.8.x wurden die Scripte von mail auf sendmail umgestellt. Das machen wir mit obigen Eintrag rückgängig. Zudem legen wir mit action fest, dass eine komplette whois Auskunft über den Angreifer gezogen wird. Stoppt nun Eure Firewall und startet diese wieder neu, damit die Änderungen übernommen werden. Wenn alles richtig konfiguriert ist bekommt Ihr nun gleich die erste Mail, dass der Fail2ban Dienst gestartet wurde. Wenn Ihr Eure IP-Falle allerdings beim Systemstart automatisch hochfahren lasst, kann es sein, dass Ihr keine E-Mails erhaltet. Das liegt daran, dass nicht der User "root" den Dienst startet, sondern das System selbst. Um dennoch auch beim automatischen Start die Mails zu bekommen fügt die SMTP Daten einfach in die '''/opt/etc/nail.rc''' ein, damit diese als Standardeinstellungen übernommen werden. Wenn Ihr die Slug nun neu startet sollte dann nach erfolgreichem Bootup die Meldung in Eurem Postfach landen, dass die IP Falle nun scharf ist: <code><pre>Hi, The jail SSH has been started successfuly. Regards, Fail2Ban</pre></code> An der Stelle komme ich nun zum Ende meines Vorschlages, die NSLU2 im Netz einwenig sicherer zu machen. Dennoch vergesst nie, wie ich es bereits eingangs schon erwähnte, die Augen offen zu halten und Eure Log-Dateien regelmäßig zu kontrollieren! <br /> <br /> <br /> [[Kategorie:NSLU2]] 4afd91b68a625f10260ed95be1b2ad56c1caa533 Backupmaschine 0 36 1006 336 2018-06-30T08:51:31Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Die Slug als intelligente Backupmaschine== Um ein Sicherungskonzept macht man sich in der Regel dann erst Gedanken, wenn es einmal zum Datengau gekommen ist. Dank unserer kleinen NSLU2 muss es aber hier nicht erst soweit kommen. Als Beispiel haben wir einen Windowsrechner (wir verwenden in diesem Tutorial ein Vista) im Netz, auf dem wir ein Verzeichnis haben, das unsere ganzen wichtigen Dokumente beinhaltet. Wir möchten jetzt, dass dieses Verzeichnis in regelmäßigen Abständen auf die Slug kopiert wird und zudem noch alte Sicherungen für eine gewisse Zeit aufgehoben werden, die wir bei Bedarf wieder heranziehen können, wenn etwas zu voreilig gelöscht wurde. Zu jeder Zeit soll aber über das Netzwerk auf unsere letzte Sicherung zugegriffen werden können, ohne dass wir großmächtig ein Backup wiederherstellen müssen. Achso... natürlich soll das vollautomatisch gehen, ohne dass wir da auf unsere Slug zugreifen müssen. Da wir aber auch nicht ständig die Logfiles der Slug ansehen wollen, soll uns die NSLU2 noch selbstständig E-Mails schicken, wenn gerade ein Backup gemacht wird und wenn es erfolgreich verlaufen ist. Das alles kann die Slug? Aber natürlich! Die richtigen Programme vorausgesetzt und ein kleines Script, dass ich für diesen Zweck geschrieben habe. <br /> <br /> <br /> ==Vorbereitungen auf unseren Windows Rechner== <div style="float:right;text-align:center;padding-left:20px"> [[Bild:slug20.png]] </div> Damit die NSLU2 später auf unseren Windowsrechner zugreifen kann benötigen wir ein eigenes Benutzerkonto mit Passwort. Legt das auf Eurem Windowsrechner an, falls nicht schon vorhanden. Ihr solltet hierfür nicht das Administratorenkonto verwenden, sondern nur ein eigenen User. Ich habe diesen in unserem Beispiel "backup" genannt. Auch bekommt er das Passwort "backup". Ihr werdet sicherlich ein etwas sicherers Passwort auswählen, aber für unser Beispiel genügt dieses erstmal. Gebt nun das gewünschte Sicherungsverzeichnis frei. Es können natürlich auch mehrere Verzeichnisse verwendet werden, dazu muss aber später unser Script einwenig angepasst werden. Zur Demonstartion des Sicherungskonzeptes genügt erstmal ein Verzeichnis. Öffnet zuerst den Windows Dateimanager "Explorer" indem Ihr auf das Startsymbol rechts klickt und "Explorer" auswählt: Klickt nun mit rechts auf das zu freigebende Verzeichnis und dort auf "Freigabe..." : [[Bild:slug21.png|center]] Wählt nun das Konto aus, das eine Freigabe für das Verzeichnis erhält: [[Bild:slug22.png|center]] Klickt dann auf "'''Hinzufügen'''" : [[Bild:slug23.png|center]] Wenn Ihr mögt könnt Ihr noch die Art der Freigabe von "Leser" auf "Mitbesitzer" ändern. Das ist allerdings optional, denn zum Sichern müssen wir nur lesen können: [[Bild:slug24.png|center]] Danach kommt noch eine Sicherheitsabfrage. Seid Ihr zu dem Zeitpunkt kein Administrator, werdet Ihr noch nach dem Admin-Passwort gefragt: [[Bild:slug25.png|center]] Danach noch kurz eine Statusanzeige, dass das Verzeichnis nun freigegeben ist: [[Bild:slug26.png|center]] Damit steht schonmal Euer Windows Share. Nun legen wir noch eine neue Datei direkt in das freigebene Verzeichnis an. Diese ist notwendig, damit unser Sicherungsscript später dieses Verzeichnis auch als Sicherungsverzeichnis akzeptiert. Legt dazu ein neues Textdokument an: [[Bild:slug27.png|center]] Benennt diese Datei in "'''sichern'''" um. Die Endung sollte '''.txt''' sein. Also '''sichern.txt'''. [[Bild:slug28.png|center]] Der Hintergrund hierzu ist, dass Ihr auf die Art und Weise ganz einfach ein Backup stoppen könnt, ohne das Script selbst auf der Slug anhalten zu müssen. Benennt die sichern.txt um oder löscht diese, dann wird das Verzeichnis solange nicht gesichert, bis Ihr wieder die sichern.text in dieses Verzeichnis packt. Wenn Ihr soweit alles vorbereitet habt, dann können wir uns an die Slug machen. <br /> <br /> <br /> ==Vorbereitungen auf der Slug== Meldet Euch auf der slug an und installiert (falls noch nicht geschehen) folgende Pakete: nail (Mailprogramm für die Konsole)<br /> coreutils (diverse Tools für die Kommandozeile)<br /> rsync (Backupprogramm)<br /> <code><pre>ipkg install coreutils nail rsync</pre></code> Solltet Ihr diesen Schritt vergessen, wird das das Script für Euch erledigen. Ebenso muss noch eine log-Datei angelegt werden: <code><pre>touch /var/log/backup</pre></code> Damit nun uns die NSLU2 auch Messages schicken kann, muss noch der nail konfiguriert werden. Öffnet hierfür die '''/opt/etc/nail.rc''' mit einem Editor (vi z.B.) und ergänzt folgende Zeilen am Ende der Datei (entsprechend Euren Server/Absender abändern): '''set smtp=smtp. euerserver. de'''<br /> '''set from=meine @mail. blah'''<br /> Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen: '''set smtp-auth-user=Loginname'''<br /> '''set smtp-auth-password=Passwort'''<br /> Da hier das Passwort in klar lesbarer Form in der .mailrc hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben. Zur Sicherung selbst legt Euch auf der Slug einen neuen User an, der ein eigenes Verzeichnis bekommt. Diesen nennen wir z.B. auch '''backup''' und der hat das Verzeichnis '''/backup'''. Dorthin wollen wir die Sicherungen schreiben und können auch später über diesen User auf die Sicherungen zugreifen. Das war's dann auch schon mit der Vorarbeit. Kommen wir zum eigentlichen Script... <br /> <br /> <br /> ==Das Backupscript== Legt nun das Backupsript in ein Verzeichnis an. Ihr könnt dies z.B. in das Verzeichnis '''/opt/bin''' kopieren. Hier das Listing meiner '''backup.sh''' backup.sh <code><pre>#!/bin/sh # Backupscript fuer die NSLU2 -- ROTIEREND -- # Gargi 2007 # getestet auf unslung 6.8 beta !!!! # Das Script funktioniert nur mit den installierten nail, coreutilis und rsync: # ipkg install coreutils rsync nail # Bitte noch eine logdatei anlegen: # touch /var/log/backup # KONFIGURATIONSBEREICH ######################## ip=192.168.1.3 # Die IP des zu scannenden Rechner verzeichnis=transfer # Das zu sichernde freigegebene Verzeichnis # Weitere Verzeichnisse koennen ergaenzt werden # verzeichnis2=xyz loginname=backup # Loginname auf den zu sichernden Rechner loginpassword=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann btarget=backup # Zielverzeichnis der Backups auf der Slug intervall=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen mailadresse=mein @ mailadresse.de # Deine E-Mailadresse # ENDE DES KONFIGURATIONSBEREICHES########## # Stelle fest, ob bereits ein Sync laeuft um ressourcen zu schonen if [ -f /tmp/backup.lock ] then echo "backup.lock gefunden. Breche Vorgang ab." echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Fein, die Slug hat Luft fuer ein Backup fi # Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren if [ -f /opt/bin/rsync ] then echo "rsync ist installiert, alles bestens" else ipkg install rsync fi if [ -f /opt/bin/wc ] then echo "coreutils sind installiert, alles bestens" else ipkg install coreutils fi if [ -f /opt/bin/nail ] then echo "nail ist installiert, alles bestens" else ipkg install nail echo "bitte konfiguriere den Nail" fi # schauen wir, ob wir loggen koennen if [ -f /var/log/backup ] then echo "wir haben ein logfile, nice" else touch /var/log/backup fi # Noch ein paar Variablen Datum=$(date +%d.%m.%g--%R) SDatum=$(date +%d.%m.%g) # Pruefe die letzte Sicherung auf das Alter ergebnis=`find /$btarget/*.1.tar.gz -type f -mtime +$intervall | wc -l` # Checken ob das der erste Sicherungslauf ist ls /$btarget/*.tar.gz if [ $? != 0 ]; then zusatz=1 else zusatz=0 fi # Schwellenwert errechnen let "schwelle=$ergebnis + $zusatz" if [ $schwelle = 0 ]; then # wir sind auf dem aktuellen Stand echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup echo Backup ist auf dem letzten Stand # Bitte folgende Zeilen auskommentieren falls diese Mail nicht gewuenscht ist echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis hierher maximal auskommentieren exit 1 else # Stelle fest, ob Rechner im Netz aktiv ist ping -c 1 $ip > /dev/null if [ $? = 0 ]; then # Rechner ist gefunden, starte Backupprozedur echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup echo Zielrechner gefunden sleep 2 # Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch # rm -r /$btarget/$verzeichnis # rm -r /$btarget/$verzeichnis2 # Mounte den Sambashare des zu sichernden Pfades mkdir /mnt/$verzeichnis # mkdir /mnt/$verzeichnis2 smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword # smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword # Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share if [ -f /mnt/$verzeichnis/sichern.txt ] then #Sperrdatei anlegen touch /tmp/backup.lock echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung per E-Mail." > mail.txt nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Fahre das Backup, veraendere die Zugriffsrechte rsync -a /mnt/$verzeichnis /$btarget/ --delete # rsync -a /mnt/$verzeichnis2 /$btarget/ --delete chown -R $btarget:everyone /$btarget chmod -R 755 /$btarget # Backupverzeichnis wieder aushaengen umount /mnt/$verzeichnis # umount /mnt/$verzeichnis2 # Backup-Rolle, loesche aeltestes Backup rm /$btarget/save.3.tar.gz mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz # Gesicherte Dateien kompremieren tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis # Weitere Verzeichnisse bitte wie folgt anhaengen: # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2 gzip /$btarget/*.1.tar # Benachrichtigungen fuer das Protokoll und per E-Mail echo "$Datum ($ip): Backuped successfully" >> /var/log/backup echo Backup beendet echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Entferne Sperrdatei rm /tmp/backup.lock else echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun. # Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist: echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. exit 1 fi else echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup # Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist: echo "$Datum ($ip): Server is dead ... nothing to care about" > mail.txt nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. fi fi</pre></code> Im oberen Bereich gibt es nun ein paar Dinge für Euch zum eintragen. Ich liste die Variablen, die Ihr anpassen müsst einmal hier gesondert auf: '''ip'''=192.168.1.3 # Die IP des zu scannenden Rechner<br /> '''verzeichnis'''=transfer # Das zu sichernde freigegebene Verzeichnis<br /> '''loginname'''=backup # Loginname auf den zu sichernden Rechner<br /> '''loginpassword'''=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann<br /> '''btarget'''=backup # Zielverzeichnis der Backups auf der Slug<br /> '''intervall'''=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen<br /> '''mailadresse'''=mein @ mailadresse.de # Deine E-Mailadresse<br /> Über die IP legen wir den Rechner im Netzwerk fest, aus dem das Backup gezogen werden soll. Dazu verraten wir dem Script, wie das freigegebene Verzeichnis auf dem zu sichernden Rechner heißt. Der Loginname und das Passwort betrifft das Windowsshare, das wir auf unserem Windowsrechner angelegt haben. Die Variable btarget ist das Ziel auf der Slug, in denen die Dateien kopiert werden. Das ist genau das Heimatverzeichnis des Useres auf der Slug, den wir für die Sicherung angelegt haben. Hierauf können wir dann später auch wieder im Netz auf dieses Samba Share zugreifen und unsere Sicherungsdateien bei Bedarf wieder herholen. Zu guterletzt geben wir noch eine Mailadresse an, an der wir die Statusmelungen schicken. Das sollte natürlich Eure eigene Mailadresse sein. Wenn Ihr die Datei '''/opt/bin/backup.sh''' angelegt habt, dann ändern wir die Zugriffsrechte und stellen damit sicher, dass nur root die Datei lesen darf: <code><pre>chmod 711 /opt/bin/backup.sh</pre></code> Damit die Datei auch über die crontab regelmäßig ausgeführt wird, ergänzen wir eine Zeile in die crontab indem wir einfach folgenden Befehl eingeben: <code><pre>echo */30 * * * * root sh /opt/bin/backup.sh >> /etc/crontab</pre></code> Mit '''vi /etc/crontab''' könnt Ihr das natürlich auch manuell erledigen, oder zumindest prüfen, ob die Zeile auch tatsächlich sich nun in der crontab befindet. Das */30 sorgt dafür, dass nun das Script alle 30 Minuten gestartet wird und seinen Dienst verrichtet. Jetzt startet Eure Slug neu. Danach ist das Script aktiv. Sollte das Script nicht so laufen, wie Ihr wollt, dann meldet Euch wieder an und startet das Script manuell: <code><pre>sh /opt/bin/backup.sh</pre></code> und seht Euch eventuelle Fehlermedlunegn an. Auch könnte die lokale Logdatei Auskunft über Probleme geben: <code><pre>tail -f /var/log/backup</pre></code> Das obige Script ist dann sehr gut einsetzbar, wenn das Dateivolumen nicht allzu groß ist, da der gzip schon einiges an Zeit benötigt, um große Dateien zu packen. Wer aber 30, 40, 50 GB zu verarbeiten hat, wird wohl auf der NSLU2 mit ihren maximal 266MHz ARM Prozessor nicht recht glücklich werden. Hier empfiehlt es sich, auf ein rotierendes Backup zu verzichten, und nur eine Sicherung offen anzulegen, sodass die Pfade im Prinzip nur 1:1 auf der Platte der NSLU2 gespiegelt werden. Zudem kann über das Netz eine Sicherung von mehreren GB auch recht langwierig werden. Wer bei 50 GB die Sicherung nicht über Nacht laufen lassen möchte, der kann natürlich die externe Platte an seinen Rechner direkt anschließen, und die Verzeichnisse erstmal komplett in das Backupverzeichnis der USB Platte kopieren. Ich habe hier als zweite Variante eines Backupsriptes nun ein Beispiel mit 6 Shares geschrieben. Zudem um ein Feature erweitert: Ich grenze die Zeit ein, in der ein Backup gefahren werden darf. Und zwar möchte ich z.B. dass die Backups erst nach 9 Uhr gefahren werden, da z.B. mein Rechner in der Regel vor 9 Uhr wenn überhaupt nur kurzfristig an ist. Somit vermeide ich, dass ich eventuell während eines Backups gezwungen bin, die Maschine auszuschalten. <code><pre>#!/bin/sh # Backupscript fuer die NSLU2 -- mit Zeitstempel -- # Gargi 2007 # getestet auf unslung 6.8 beta !!!! # Das Script funktioniert nur mit den installierten nail, coreutilis und rsync: # ipkg install coreutils rsync nail # Bitte noch eine logdatei anlegen: # touch /var/log/backup # KONFIGURATIONSBEREICH ######################## ip=192.168.1.5 # Die IP des zu scannenden Rechner verzeichnis=transfer1 # Das zu sichernde freigegebene Verzeichnis verzeichnis2=transfer2 verzeichnis3=transfer3 verzeichnis4=transfer4 verzeichnis5=transfer5 verzeichnis6=transfer6 # Weitere Verzeichnisse koennen ergaenzt werden # verzeichnis2=xyz loginname=backup # Loginname auf den zu sichernden Rechner loginpassword=1234567 # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann btarget=backup # Zielverzeichnis der Backups auf der Slug intervall=3 # Groesse des Intervalls an Tagen zwischen den Sicherungen mailadresse=meine @ emailaddy.de # Deine E-Mailadresse uhrzeit=09 # Ab dieser Stunde werden erst Backupsgezogen. Vorher nicht. # ENDE DES KONFIGURATIONSBEREICHES########## # Stelle fest, ob bereits ein Sync laeuft um Ressourcen zu schonen if [ -f /tmp/backup.lock ] then echo "backup.lock gefunden. Breche Vorgang ab." echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Fein, die Slug hat Luft fuer ein Backup fi # Beende das Script vor einer bestimmten Uhrzeit zeit=$(date +%H) if [ $zeit -lt $uhrzeit ];then echo das ist mir zu bald am morgen echo "Zwischen 0 und $uhrzeit Uhr sind Backups ausgeklammert. Stoppe Funktion bis $uhrzeit Uhr" > mail.txt nail -s "[Backup] Guten Morgen Nachricht" -q mail.txt $mailadresse < /dev/null rm mail.txt exit 1 else echo Die Zeit geht in Ordnung, wir koennen versuchen, das Backup zu starten. fi # Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren if [ -f /opt/bin/rsync ] then echo "rsync ist installiert, alles bestens" else ipkg install rsync fi if [ -f /opt/bin/wc ] then echo "coreutils sind installiert, alles bestens" else ipkg install coreutils fi if [ -f /opt/bin/nail ] then echo "nail ist installiert, alles bestens" else ipkg install nail echo "bitte konfiguriere den Nail" fi # schauen wir, ob wir loggen koennen if [ -f /var/log/backup ] then echo "wir haben ein logfile, nice" else touch /var/log/backup fi # Noch ein paar Variablen Datum=$(date +%d.%m.%g--%R) SDatum=$(date +%d.%m.%g) # Pruefe die letzte Sicherung auf das Alter ergebnis=`find /$btarget/*.tstamp.txt -type f -mtime +$intervall | wc -l` # Checken ob das der erste Sicherungslauf ist ls /$btarget/*.tstamp.txt if [ $? != 0 ]; then zusatz=1 else zusatz=0 fi # Schwellenwert errechnen let "schwelle=$ergebnis + $zusatz" if [ $schwelle = 0 ]; then # wir sind auf dem aktuellen Stand echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup echo Backup ist auf dem letzten Stand # Bitte folgende Zeilen falls diese Mail nicht gewuenscht ist echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis hierher maximal auskommentieren exit 1 else # Stelle fest, ob Rechner im Netz aktiv ist ping -c 1 $ip > /dev/null if [ $? = 0 ]; then # Rechner ist gefunden, starte Backupprozedur echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup echo Zielrechner gefunden sleep 2 # Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch # rm -r /$btarget/$verzeichnis # rm -r /$btarget/$verzeichnis2 # Mounte den Sambashare des zu sichernden Pfades mkdir /mnt/$verzeichnis mkdir /mnt/$verzeichnis2 mkdir /mnt/$verzeichnis3 mkdir /mnt/$verzeichnis4 mkdir /mnt/$verzeichnis5 mkdir /mnt/$verzeichnis6 smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis3 /mnt/$verzeichnis3 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis4 /mnt/$verzeichnis4 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis5 /mnt/$verzeichnis5 -o username=$loginname,password=$loginpassword smbmount //$ip/$verzeichnis6 /mnt/$verzeichnis6 -o username=$loginname,password=$loginpassword # Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share if [ -f /mnt/$verzeichnis/sichern.txt ] then #Sperrdatei anlegen touch /tmp/backup.lock echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung per E-Mail." > mail.txt nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Fahre das Backup, veraendere die Zugriffsrechte rsync -a /mnt/$verzeichnis /$btarget/ --delete rsync -a /mnt/$verzeichnis2 /$btarget/ --delete rsync -a /mnt/$verzeichnis3 /$btarget/ --delete rsync -a /mnt/$verzeichnis4 /$btarget/ --delete rsync -a /mnt/$verzeichnis5 /$btarget/ --delete rsync -a /mnt/$verzeichnis6 /$btarget/ --delete chown -R $btarget:everyone /$btarget chmod -R 755 /$btarget # Backupverzeichnis wieder aushaengen umount /mnt/$verzeichnis umount /mnt/$verzeichnis2 umount /mnt/$verzeichnis3 umount /mnt/$verzeichnis4 umount /mnt/$verzeichnis5 umount /mnt/$verzeichnis6 # Backup-Rolle, loesche aeltestes Backup # rm /$btarget/save.3.tar.gz # mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz # mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz # Gesicherte Dateien kompremieren # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis # Weitere Verzeichnisse bitte wie folgt anhaengen: # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2 # gzip /$btarget/*.1.tar # Loesche alten Zeitstempel rm /$btarget/*.tstamp.txt # Setze neuen Zeitstempel touch /$btarget/$SDatum.tstamp.txt # Benachrichtigungen fuer das Protokoll und per E-Mail echo "$Datum ($ip): Backuped successfully" >> /var/log/backup echo Backup beendet echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null rm mail.txt # Entferne Sperrdatei rm /tmp/backup.lock else echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun. # Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist: echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. exit 1 fi else echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup # Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist: echo "$Datum ($ip): Server is dead ... nothing to care about" > mail.txt nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null rm mail.txt # Bis maximal hier auskommentieren. fi fi</pre></code> Falls Ihr nun mehre Rechner im Netz sichern wollt, dann legt hierfür ein neues Script an. Dieses startet über die cron einwenig zeitversetzt zum anderen Script, damit die sich nicht so leicht in die Quere kommen. Damit dies aber auch nicht passieren kann und die Slug durch zwei parallel laufenden Backupvorgänge in die Knie gezwungen wird, habe ich einen Sperrmechanismus integriert, der dafür sorgt, dass ein zweites Script nur dann starten kann, wenn das erste auch beendet ist. Viel Spaß beim Sichern! <br /> <br /> <br /> [[Kategorie:NSLU2]] ebbcf10e692166e73d14375267d189d4b7222939 Debian auf der NSLU2 0 49 1007 338 2018-06-30T08:52:07Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggy2.png|Debbislug]] <br /> ''Um den Finger gewickelt''</div> Wer glaubt, dass mit dem Unslung das Ende der Fahnenstange erreicht ist, der täuscht sich ... zum Glück. Denn langweilig wird es einem mit der NSLU2 sicherlich nicht. So hat es nicht lange gedauert, bis eine spezielle Version für unsere geliebte Schnecke erhältlich gewesen ist. Nun kann ein Debian Etch auf der Slug installiert werden. Hierzu gibt es zwei Varianten, die erhältlich sind. Zum einen die reine Debian Variante ohne proprietären Treiber für den NSLU2 IXP4xx Netzwerkchip. Hier muss dann ein externer USB Netzwerkadapter verwendet werden. Desweiteren gibt es ein unofficial Pakage mit dem Treibermodul um eben den internen Netzwerkchip in Betrieb nehmen zu können. Aber egal was Ihr verwendet, die Installation sieht bei beiden Varianten gleich aus. Ihr installiert die Debian Firmware und loggt Euch via ssh ein. Dort wartet auch schon der Installer, der Euch durch den zugegeben etwas langwierigen Installationsprozess führt. Ihr werdet dort ein Basissystem installieren. Ebenso legt Ihr dann dort das Root-Passwort fest und erstellt einen ersten User. Bereits hier könnt Ihr schon Pakete für einen Webserver auswählen. Nachdem das System die Installation durchgeführt hat wird die Slug neu booten und ein Debianserver Euch beim nächsten Login begrüßen. Hierbei müsst ihr folgendes beachten: Die Debian Slug hat nachher keinen Webadmin mehr. Ebenso wird kein Samba Server von Haus aus installiert sein. Dieser muss dann neu eingerichtet werden, sollte dieser auf der Debian Slug benötigt werden. Erwartet zudem keine Geschwindigkeitsrekorde. Die Debianinstallation sollte von daher nur für eine Aufgabe verwendet werden (Firewall, FTP, Downloadbüchse etc.), denn die 32 MB Ram werden von Haus aus nur noch 10 bis 11 MB freien Speicher zur Verfügung stellen, wenn einmal das Basissystem gebootet hat. Versteht die Debian Installation als Bastelgerät mit dem Ihr einfach Spaß haben wollt. ==Vorbereitung== Bevor Ihr allerdings mit der Installation loslegt solltet Ihr auf alle Fälle Eure Slug richtig im Webadmin konfiguriert haben. Die gewünschte IP Adresse und der Gateway muss eingetragen sein. Diese Werte übernimmt der Debianinstaller entsprechend. Ladet nun die gewünschte Debianfirmware herunter: '''Debian (free), di-nslu2.bin''' [http://ftp.de.debian.org/debian/dist...xp4xx/netboot/] '''Debian (mit IXP4xx Netzwerkmodule für die Slug)''' [http://www.slug-firmware.net/d-dls.php] Flashen der Firmware: ==='''Möglichkeit A)'''=== Hier könnt Ihr die '''di-nslu2.bin''' über den Webadmin hochladen. Gebt dazu den genauen Speicherplatz des Images an: [[Bild:debian_slug01.png]] Nächstes erhaltet Ihr die obligatorische Sicherheitsabfrage: <div style="float:left;text-align:center;padding-right:20px"> [[Bild:debian_slug02.png.png]]</div> Danach kann es eine kurze Weile dauern, bis das Eeprom geflasht wird. Ihr erkennt das an der Slug, dass nun das Power-LED Rot / Grün blinkt. Unterbrecht diesen Vorgang auf keinen Fall. Ein vorzeitiges Abbrechen kann die NSLU2 erstmal für Euch unerreichbar machen. Zudem kann es leider vorkommen, dass das Update mit einem Fehler abbricht (bad file Format). Versucht es dann eventuell mit einem anderen Browser. Sollte auch das nicht fruchten, so fahrt spätestens dann mit der Variante B fort: ==='''Möglichkeit B)'''=== Das meine ich ist der etwas einfachere Weg und geht über Linux. Zunächst benötigt man das Programm upslug2. Dieses kompilieren wir selbst nachdem wir uns das Quellpaket besorgt haben: <code><pre>svn co http://svn.nslu2-linux.org/svnroot/upslug2/trunk upslug2</pre></code> Das erzeugt ein neues Unterverzeichnis upslug2. In dies wechseln wir dann: <code><pre>cd upslug2</pre></code> Danach starten wir den Kompile mit folgenden Befehlen: <code><pre>autoreconf -i ./configure make</pre></code> Jetzt liegt das Programm upslug2 im Buildverzeichnis. Kopiert nun die aktuelle Firmware in das gleiche Verzeichnis. Nun stellt Euer Netzwerk auf folgende IP um: 192.168.0.xxx D.h. : Die NSLU2 wird wieder die IP 192.168.0.1 verwenden, somit muss der Linuxrechner eine andere Endnummer bekommen. Jetzt versetzen wir die NSLU2 mit einem einfachen Trick in den Redboot- Modus: Schalte die Slug aus und nehmt eine Büroklammer zur Hand. Drückt damit auf der Rückseite des Gerätes den Reset-Button. Diesen haltet dann fest und drückt vorne auf den Einschaltknopf. Den Einschaltkopf lasst los und haltet hinten noch den Reset-Knopf gedrückt. Dann beobachtet die obere LED. Diese wird zuerst orange und nach ca. 10 Sekunden rot. Jetzt den Reset-Knopf loslassen! Wenn nun die LED Rot-Grün blinkt, dann ist diese bereit für den Flashvorgang. Setzt Euch nun an Euren Linuxrechner und holt Euch an der Konsole root-Rechte: <code><pre>su [PASSWORT EINGEBEN]</pre></code> Nun startet das upslug2 Program aus Eurem Buildverzeichnis heraus mit folgendem Befehl: <code><pre>./upslug2 --image="di-nslu2.bin"</pre></code> Wenn Ihr mehrere NSLU2 im Netz hängen habt, muss die MAC Adresse angegeben werden: <code><pre>./upslug2 --target="xx:xx:xx:xx:xx:xx" --image="di-nslu2.bin"</pre></code> '' (xx:xx:xx:xx:xx:xx = MAC Adresse der zu flashenden NSLU2)'' Ein Output, der auf das erfolgreiche Flashen hindeutet sieht in etwa so aus: <code><pre> ./upslug2 --image="di-nslu2.bin" LKG7E985E 00:0f:66:7e:98:5e Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363] Upgrading LKG7E985E 00:0f:66:7e:98:5e . original flash contents * packet timed out ! being erased - erased u being upgraded U upgraded v being verified V verified Display: <status> <address completed>+<bytes transmitted but not completed> Status: * timeout occurred + sequence error detected 7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV Rebooting... done</pre></code> Solltet Ihr später das Debian nicht mehr weiter verwenden und lieber wieder mit der unslung arbeiten wollen, dann könnt Ihr die Unslung Firmware genau auf diese Art und Weise wieder aufkopieren, denn spätestens jetzt habt Ihr keinen Webadmin mehr zur Verfügung über den Ihr das auch lösen könntet. Jetzt sind wir soweit und können mit der Installation loslegen: ==Debian installieren== Steckt an den ersten Port Eure USB Platte an und startet die Kiste neu, damit sicher gestellt ist, dass die Platte einsatzbereit ist. Danach verbindet Ihr Euch über ssh mit der Slug: <code><pre>ssh installer@xxx.xxx.xxx.xxx (IP der Slug)</pre></code> Das Passwort lautet '''install''' . Ihr solltet nun folgende Anzeige bekommen: [[Bild:debian_slug03.png]] Hier wählt Ihr dann "'''Start Menu'''" aus. Im nächsten Menü dann die korrekte Ländereinstellung: [[Bild:debian_slug04.png]] Wählt dann einen Spiegelserver aus, von dem weitere Installationspakete nachgeladen werden sollen: [[Bild:debian_slug05.png]] Einen Proxy brauchen wir nicht zwingend auswählen, außer Ihr verwendet einen: [[Bild:debian_slug06.png]] Falls nicht, lasst das Eingabefeld leer und fahrt mit '''continue''' fort. Nun bekommt Ihr ein Auswahlmenü für diverse Module, die geladen werden können: [[Bild:debian_slug07.png]] Notwendig für die Installation auf eine USB Platte sind folgende Module: * partman-auto: Automatically partition storage devices (partman) * partman-ext3: Add to partman support for ext3 * usb-storage-modules-2.6.18-5-ixp4xx-di: USB storage support Hierbei wird dafür gesorgt, dass das ext3 Format verwendet wird. Ebenso das Modul für die USB Festplatte und der Partman zur Partitionierung der Platte. Jetzt werden einige zusätzliche Komponenten geladen: [[Bild:debian_slug08.png]] Danach wird das Partitionierungsprogramm gestartet: [[Bild:debian_slug09.png]] An der Stelle könnt Ihr die Vorgabe des Systems verwenden (guided) oder auch per Hand (manual) einstellen: [[Bild:debian_slug10.png]] Da wir die komplette Platte für unser Slug verwenden wollen können wir ruhig den guided Modus verwenden. Wählt dazu Eure Festplatte aus, die an der Stelle angezeigt werden sollte: [[Bild:debian_slug11.png]] Im nächsten Menü können verschiedene Vorgaben ausgewählt werden. Man kann durchaus die komplette Platte für root verwenden, sofern eh nichts anderes mit der Platte passiert. Anderweitig empfiehlt es sich auch eine getrennte /home Partition einzurichten: [[Bild:debian_slug12.png]] Übernehmt dann die Einstellung mit "'''Finish partitioning and write changes to disk'''" [[Bild:debian_slug13.png]] Eine letzte Sicherheitsabfrage, die Ihr mit "'''yes'''" beantworten könnt: [[Bild:debian_slug14.png]] Die Platte wird dann formatiert (spätestens hier sind alle Daten, die vorher auf dieser Platte waren futsch): [[Bild:debian_slug15.png]] Als nächstes stellt die korrekte Sprache ein: [[Bild:debian_slug16.png]] Die Systemzeit wird eingestellt: [[Bild:debian_slug17.png]] Danach legt Euer Root-Passwort fest: [[Bild:debian_slug18.png]] Das muss noch einmal bestätigt werden: [[Bild:debian_slug19.png]] Jetzt legt Ihr einen ersten Benutzer an: [[Bild:debian_slug20.png]] Der Username für den Account: [[Bild:debian_slug21.png]] Das Passwort: [[Bild:debian_slug22.png]] Und auch nochmal zu bestätigen: [[Bild:debian_slug23.png]] Das Basissystem wird danach installiert, was durchaus einwenig dauern kann: [[Bild:debian_slug24.png]] Der Tasksel zur Auswahl der zu installierenden Software wird gestartet: [[Bild:debian_slug25.png]] Bei der nächsten Abfrage entscheidet Ihr, ob Ihr an der statistischen Erfassung bezüglich der Verwendung der Programmpakete teilnehmen wollt: [[Bild:debian_slug26.png]] Ich empfehle hier erstmal nur das '''Standard System''' zu installieren. Was wir später benötigen können wir immer noch installieren. Zuerst sollten wir nicht zu viel Zeit mit langwierigen Installationsprozessen von Programmen verschwenden, die wir dann schlußendlich doch nicht benötigen. Also lassen wir nur den Menüpunkt "'''Standard System'''" aktiviert und gehen auf '''Continue''': [[Bild:debian_slug27.png]] Jetzt werden die Programme über das Netz nachgezogen. Das kann auch einwenig Zeit in Anspruch nehmen. Gönnt Euch hier zwischenzeitlich ruhig einen Tee und vielleicht eine netten Film auf DVD ;-) [[Bild:debian_slug28.png]] Wenn das geschafft ist, wird das System zum Reboot vorbereitet: [[Bild:debian_slug29.png]] Das finale Bild: [[Bild:debian_slug30.png]] Startet das System dann mit "'''continue'''" neu durch. Der Bootvorgang dauert einwenig, aber wenn Ihr die Slug 3x piepsen hört könnt Ihr Euch nun via ssh auf Euren Server einloggen. Der Zugang geht dann entweder über "root" mit Eurem festgelegten Passwort oder mittels Eurem ersten Standard- User. Glückwunsch! Ihr habt jetzt ein waschechtes Debian auf der Slug laufen! Von hier aus könnt Ihr als erfahrene Linux Administratoren dann schalten und walten was unsere liebe Schnecke so hergibt. [[Kategorie:NSLU2]] 89d3dfe9872bd8053a660b3bedca304053511e23 Nagios installieren und konfigurieren 0 156 1009 970 2018-06-30T08:52:38Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Vorwort== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:sluggykl.png|slug]] <br /> ''Alles im Griff''</div> Vertrauen ist gut, Kontrolle ist besser ... ein Spruch, der sich gerade was Server betrifft sich immer wieder bewahrheitet. Deswegen ist ein ordentliches Servermonitoring das A und O wenn es darum geht, die darauf laufenden Dienste auch immer im Auge zu behalten und schnell einzuschreiten, wenn es einmal wo kracht. Oder noch besser: Wenn es sogar automatisch wieder ans Laufen gebracht wird und unser Eingreifen nur noch dann gefordert ist, wenn es nicht mehr anders geht. <br /><br /> Um Server zu Überwachen gibt es sicherlich teure Lösungen. Aber wir wollen uns einmal daran halten, was uns die Opensource Welt an Softwaregeschenken macht. Das führt mich zu '''Nagios Core 3''', eine freie Servermonitoring Software, die weit verbreitet ist und zu der es eine Vielzahl an Erweiterungen mittlerweile gibt, die einem das Leben noch leichter machen. <br /><br /> Mich hat es zudem interessiert, ob wir auf unserer NSLU2 auch die Chance haben, derartige Software zum Laufen zu bringen. <br /><br /> <div style="text-align:center"> [[Bild:nagios_nslu2_2.png.png|NagiosNSLU2]] <br /> ''Nagios auf der NSLU2 in Äktsch'n:''</div> <br /><br /> Dazu habe ich erstmal ein aktuelles Debian (Debian 6 Squeeze) für die ARML Plattform installiert (eine Anleitung dazu findet Ihr hier, doch macht hier nur die Basisinstallation und keine weiteren Dienste! http://myslug.de/index.php?title=Debian_6_auf_der_NSLU2 <br /><br /> Wenn Ihr ein Basissystem installiert habt, kann es schonmal los gehen. Wir installieren zuerst ein Standard Nagios über den apt: <br /><br /> ==Nagios installieren== Um das System auf einem Debian Lenny zu installieren kann der Apt Paketmanager relativ einfach verwendet werden. Auf einem einfachen Basissystem setzt hierzu ein <code><pre> apt-get install nagios3 nagios-plugins</pre></code> ab. Die folgenden beiden Abfragen beantwortet einfach mit den jeweiligen Standardvorgaben: <br /><br /> [[Bild:nagios_install_1.png.png|Install1]] <br /><br /> [[Bild:nagios_intsall_2.png.png|Install2]] <br /><br /> Ansonsten dürfte das Standardsystem damit installiert sein. Der vorgegebene User innerhalb der Standardkonfiguration lautet nagiosadmin. <br /><br /> Ihr werdet dann noch nach einem Admin Passwort gefragt, das via htaccess den Zugriff steuert. <br /><br /> Ihr könnt nun Nagios mit einem Browser unter <code><pre> http://IP_ODER_DEINE_DOMAINE/nagios3</pre></code> aufrufen. <br /><br /> Solltet Ihr irgendwelche Konfigurationsdateien von Nagios ändern, dann vergesst nicht, nagios mittels <code><pre> /etc/init.d/nagios3 reload</pre></code> neu zu starten. <br /><br /> ==Erste Änderung nach der Installation von Nagios== Ändern des Homeverzeichnis in der /etc/passwd: <code><pre> nano /etc/passwd</pre></code> Suchen nach folgender Zeile: <code><pre> nagios:x:104:106::/var/run/nagios3:/bin/false</pre></code> Danach diese in <code><pre> nagios:x:104:106::/home/nagios:/bin/bash</pre></code> ändern, bzw. besser alte Zeile auskommentieren und diese neu anlegen. Dadurch wird auch für das Erste ein su auf den User nagios ermöglicht, was wir später für die Erzeugung eines privaten und öffentlichen Schlüssels benötigen. <br /><br /> Nun legen wir das neue Homeverzeichnis an: <code><pre> mkdir /home/nagios</pre></code> Die korrekten Nutzerrechte: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> <br /><br /> ==Erstes Monitoring== Im Netzwerk befindet sich der Server 192.168.0.2 der Server1 heißen soll. Diesen müssen wir erstmal Nagios bekannt machen. Dazu legen wir im '''/etc/nagios3/conf.d/''' eine neue Konfiguration fest: <code><pre> touch /etc/nagios3/conf.d/server1_nagios2.cfg</pre></code> Diese editieren wir und füllen die Datei wie folgt: <code><pre> define host{ use generic-host host_name Server1 alias Server1 address 192.168.0.2 }</pre></code> Diese Datei wird Dreh- und Angelpunkt für unser Monitoring werden. Aber wir bekommen so erstmal noch nichts zu sehen. Also machen wir einfach mal die Datei '''/etc/nagios3/conf.d/hostgroups_nagios2.cfg''' auf. Dort schauen wir uns einmal den folgenden Abschnitt an: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost }</pre></code> Hier ist bereits schon der Monitoringdienst für Webserver vordefiniert. Wenn wir immer wieder die gleichen Dienste für verschiedene Server haben, können wir diese Dienst als eine Gruppe auch hier hinterlegen. Das macht Sinn, wenn es besonders viele Server sind. In unserem Fall wollen wir, dass unser Server auch ein Mitglied der http-server wird und damit ein Monitoring auf den http gemacht wird. Ändert dafür den Abschnitt wie folgt ab: <code><pre> # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,Server1 }</pre></code> Gleiches kann dann auch für die ssh Gruppe usw. gemacht werden. Hierzu müsst Ihr Euch einfach zunächst die fordefinierten Gruppen in dieser Konfigurationsdatei ansehen. Wenn Ihr Eure Änderungen vorgenommen und alles gespeichert habt, müsst Ihr den Nagios wieder neu starten: <code><pre> /etc/init.d/nagios3 reload</pre></code> Jetzt sollte Euer Server mit den ersten Diensten im Monitoring sein. <br /><br /> ==Weitere Dienste einrichten== Im Folgenden werden wir ein paar weitere Dienste einrichten. Diese Dienste werden erstmal recht einfach sein, da sie nicht lokal auf dem Zielrechner ausgeführt werden müssen. Hier bietet sich erstmal der FTP Dienst an. <br /><br /> Jetzt möchten wir erstmal wissen, wie dieser Check genau aussieht und ob dieser bereits definiert ist. Hierzu spitzen wir einfach einmal in das '''/etc/nagios-plugins/config''' Verzeichnis. Dort finden wir eine '''ftp.cfg''' Datei, die wir zunächst uns einmal näher ansehen: <code><pre> # 'check_ftp' command definition define command{ command_name check_ftp command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' } #### # use these checks, if you want to test IPv4 connectivity on IPv6 enabled syste$ #### # 'check_ftp_4' command definition define command{ command_name check_ftp_4 command_line /usr/lib/nagios/plugins/check_ftp -H '$HOSTADDRESS$' -4 }</pre></code> Der erstere Aufruf ist für uns interessant. Hier sehen wir, dass das Check Kommando '''check_ftp''' heißt. <br /><br /> Jetzt rufen wir wieder unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' auf. Dort bauen wir folgenden Abschnitt unter unserer Hostdefinition ein: <code><pre> define service { host_name Server1 service_description FTP check_command check_ftp use generic-service notification_interval 0 }</pre></code> Speichert die Änderung und startet den Nagios neu: <code><pre> /etc/init.d/nagios3 restart</pre></code> Schaut Euch im Plugins Verzeichnis ein wenig um, dort findet Ihr sicherlich schnell in den Konfigurationsdateien einen Hinweis darauf, welchen Dienst Ihr bereits einfach einbauen könnt. <br /><br /> Allerdings geht nicht jedes Plugin direkt vom Nagios Server aus, sondern muss auf dem Zielserver teilweise remote ausgeführt werden. Das ist ein wenig tricky, aber das schauen wir uns dennoch gleich einmal an. <br /><br /> ==Externe Kommandos aktivieren== Um später externe Kommandos abzusetzen muss noch etwas gedreht werden. <br /><br /> Zuerst mittels einem Editor die Zeile '''check_external_commands=1''' in der '''/etc/nagios3/nagios.cfg''' setzen. <br /><br /> Folgende Befehle dann an der Konsole absetzen: <code><pre> /etc/init.d/nagios3 stop dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 /etc/init.d/nagios3 start</pre></code> <br /><br /> ==Plugin Remote ausführen== Jetzt wird es deutlich kniffeliger, da wir nun einen Check auf den Zielrechner direkt durchführen wollen. Einige Plugins müssen auch entsprechend auf dem Zielrechner gestartet werden, da wir eine Information über den Festplattenstatus, den Serverload etc. nur vom jeweilgen Server direkt geliefert bekommen können. <br /><br /> Dafür müssen wir unseren Zielrechner erstmal einwenig vorbereiten. Die folgenden Schritte werden somit alle erstmal auf dem Zielserver durchgeführt: <br /><br /> '''a)''' Nutzer und Gruppe Nagios erzeugen: <code><pre> groupadd -g 9001 nagios useradd -u 9001 -g nagios -d /home/nagios -m -c "Nagios Monitoring" nagios</pre></code> '''b)''' Nutzerverzeichnisrechte anpassen: <code><pre> chown -R nagios:nagios /home/nagios</pre></code> '''c)''' Neues Verzeichnis anlegen: <code><pre> su nagios mkdir /home/nagios/.ssh exit</pre></code> '''d)''' Plugins installieren: <code><pre> apt-get install nagios-plugins</pre></code> Das wars dann soweit auf dem Zielrechner. Den Rest machen wir wieder vom Nagios Rechner aus: <br /><br /> Schlüssel erzeugen: <code><pre> su nagios cd /home/nagios/.ssh ssh-keygen -b 1024 -f id_dsa -t dsa -N ''</pre></code> Das hat zum einen den Schlüssel erzeugt. Damit Nagios auch den Zielrechner als "known-hosts" einträgt, loggt Euch einfach kurz in den Zielrechner ein: <code><pre> ssh 192.168.0.2</pre></code> Ihr werdet aufgefordert, den Fingerprint des Zielrechner zu speichern. <br /><br /> Jetzt verlasst wieder den Zielrechner: <code><pre> exit</pre></code> Danach den Nutzer nagios: <code><pre> exit</pre></code> Wir schieben nun unseren Schlüssel auf den Zielrechner: <code><pre> scp /home/nagios/.ssh/id_dsa.pub 192.168.0.2:/home/nagios/.ssh/authorized_keys</pre></code> Jetzt nochmal kurz auf unserem Zielrechner die Rechte angepasst: <code><pre> chown -R nagios:nagios /home/nagios/.ssh chmod 700 /home/nagios/.ssh</pre></code> Das waren soweit erstmal die Vorbereitungen. Wir testen gleich einmal, ob alles klappt. Gebt hierzu auf dem Nagiosrechner folgendes ein: <code><pre> su nagios /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_users -w 10 -c 20"</pre></code> Das sollte Euch nun anzeigen, wieviele User auf dem Zielrechner eingeloggt sind. Ihr dürft an der Stelle nicht mehr nach irgendeinem Passwort gefragt werden. Sollte das dennoch der Fall sein, dann überprüft bitte Eure Installation. <br /><br /> Ihr habt gesehen, dass wir auf dem Nagios Server einen check_by_ssh ausführen und auf dem Zielrechner das entsprechende tatsächliche Plugin. So gestalten wir auch in Zukunft den Aufbau von einem Remote Check. Dies muss aber bevor wir den als normalen Dienst integrieren entsprechend definiert werden. Wir schauen uns dazu wieder das Verzeichnis '''/etc/nagios-plugins/config''' an. Dort sehen wir eine '''load.cfg'''. Diese Datei öffnen wir einfach mal und sehen uns an, was bereits dort definiert ist: <code><pre> # 'check_load' command definition define command{ command_name check_load command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$' }</pre></code> Diese definition ist für einen lokalen Check ausgelegt. Wir fügen nun folgende Zeilen darunter ein: <code><pre> # 'ssh_check_load' command definition define command{ command_name ssh_check_load command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Ihr seht, dass wir ein neues Kommando gebaut haben, das auf den Aufruf ssh_check_load hört. Wir übernemen im Grunde die alte Kommandozeile und erweitern die um den check_by_ssh Aufruf. Diese Erweiterung ist dann auch für alle anderen Plugins gleich. Die alte Zeile wird dann in Hochkommas " " gefasst und bei den Argumenten $ARGS$ die einfachen Hochkommas ' ' weggelassen. Das ist wichtig, da sonst der Auffruf nicht funktioniert! Auch wenn später innerhalb des Remotebefehls das '''$HOSTADDRESS$''' rein muss, müssen wir die einfachen Hochkommas weglassen! <br /><br /> Wir speichern die Änderung und bauen nun den Check in unsere '''/etc/nagios3/conf.d/server1_nagios2.cfg''' ein: <code><pre> define service{ use generic-service host_name Server1 service_description Current Load check_command ssh_check_load!5.0!4.0!3.0!10.0!6.0!4.0 }</pre></code> Hinter unserem '''ssh_check_load''' Kommando werden dann die entsprechenden Argumente gesetzt ( '''$ARGS1$ ...''' ) und mit Ausrufezeichen getrennt. <br /><br /> Das war's dann auch schon. Startet Nagios neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Templates ändern== Sämtliche Überwachungsoptionen (Checkintervall, wer soll verständigt werden etc.) können natürlich innerhalb der Service eingegeben werden. Das macht allerdings die Konfigurationsdateien auf Dauer ziemlich unübersichtlich. Von daher können auch Templates definiert werden, die dann über das use Kommando eingebunden werden. Hier einmal das Standard Template aus der '''/etc/nagios3/conf.d/generic-service_nagios2.cfg''' : <code><pre> define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 ;täglich rund um die Uhr wird geprüft normal_check_interval 5 ; alle 5 Minuten wird geprüft retry_check_interval 1 ; Bei Fehler wird in einer Minute nochmals geprüft max_check_attempts 4 ; 4 Fehlschläge bis Statusmeldung notification_period 24x7 ; täglich rund um die Uhr wird gemeldet notification_options w,u,c,r ; Status Warning, Undefiniert, Critical, Recovered wird gemeldet contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Ich habe mal fehlende Erklärungen ergänzt. Wenn Ihr ein neues Template anlegen wollt, dann kopiert diesen Abschnitt und ändert den Templatenamen. Dann könnt Ihr entsprechend weitere Änderungen vornehmen: <code><pre> define service{ name mein-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins,techniker register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }</pre></code> Jetzt könnt Ihr bei den Services entsprechend die Änderungen dort vornehmen, wo es auch geändert werden soll: <code><pre> define service { host_name Server1 service_description SSH check_command check_ssh use mein-service }</pre></code> Nach Änderung müsst Ihr Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Diese Templateänderung gilt nur für die Services! Wenn Ihr das Template (generic-host) innerhalb Eurer host - Definition ändern wollt, dann geht analog in der Datei '''/etc/nagios3/conf.d/generic-host_nagios2.cfg''' . Kommt nur nicht auf die Idee, ein Service Template innerhalb des host-Abschnitts zu verwenden! Da sollen sich schon Leute fummelig nach den Fehlern gesucht haben <br /><br /> ==Benachrichtigungen versenden== Das beste Monitoring nützt natürlich nichts, wenn wir nicht über einen Ausfall verständigt werden. Nagios kann das sowohl per Mail als auch per SMS. Der SMS Weg setzt natürlich noch zusätzliche Hardware (ISDN etc.) voraus, weshalb wir uns in unserem Tutorial nur auf die klassische E-Mail beschränken. <br /><br /> Damit aber überhaupt eine Mail von unserer Slug versendet werden kann müssen wir ersteinmal einen Mail Transporter definieren. Aufmerksame Leser meiner Seite kennen eventuell die Vorgehensweise, aber ich liste die notwendigen Schritte dazu gerne nochmal auf. <br /><br /> Die heutigen Debianserver haben als Standard MTA den exim4 hinterlegt. Solltet Ihr eigentlich keinen Mailserver aktiviert haben, könnt Ihr aber dennoch den exim4 dazu verwenden, via eines sogenannten Smarthosts (= externer Mailserver) Eure Nagios Mails verschicken zu lassen. <br /><br /> Um einen Smarthost einzurichten startet die Konfiguration mit einem <code><pre> dpkg-reconfigure exim4-config</pre></code> '''Folgende Konfigurationsschritte:''' <br /><br /> 1.) '''Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail''' <br /><br /> 2.) Email Name des Systems: '''Lasst einfach den voreingestellten Domänen Name stehen''' <br /><br /> 3.) IP-Adressen, auf denen eingehende SMTP-Verbindungen erwartet werden: '''127.0.0.1''' <br /><br /> 4.) Weitere Ziele, für die die E-Mails angenommen werden sollen:''' Auch hier den default Domän Namen stehen lassen''' <br /><br /> 5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): '''Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.''' <br /><br /> 6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: '''Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!''' <br /><br /> 7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: '''Ja''' <br /><br /> 8.) Sichtbarer Domänennamen für lokalen Benutzer: '''Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)''' <br /><br /> 9.) DNS Anfrage minimieren: '''Ja''' <br /><br /> 10.) Versandart bei lokaler Mailzustellung: '''Mbox Format in /var/mail/''' <br /><br /> 11.) Einstellungen auf kleine Dateien aufteilen:''' Nein''' <br /><br /> Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: '''/etc/exim4/passwd.client''' <br /><br /> Hier das Passwort wie folgt hinterlegen: <code><pre> IP_des_Mailserver_oder_Name:LOGIN:PASSWORT</pre></code> Die Datei sollte nur lesbar für root sein. <br /><br /> Startet danach den MTA neu: <code><pre> /etc/init.d/exim4 restart</pre></code> Soweit so gut. Legt nun einen neuen Kontakt in der Datei '''/etc/nagios3/conf.d/contacts_nagios2.cfg''' an. Kopiert einfach dazu den root User Abschnitt und ändert diesen entsprechend Eurer Daten ab: <code><pre> define contact{ contact_name mein_name alias Mein_name service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email meine@adresse.mail }</pre></code> Wenn der neue Kontakt definiert ist, fügt diesen dann in den Abschnitt Contact Groups der gleichen Datei mit ein: <code><pre> define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,mein_name }</pre></code> Da der Kontakt root ein "Dummy" ist, könnt Ihr den auch gleich aus der Zeile members löschen. <br /><br /> Wie immer dann den Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> Um jetzt zu testen, dass alles klappt, schießt einfach einen Dienst auf Euren Zielserver ab und wartet, bis Ihr eine Mail bekommt. Das dürfte nicht lange dauern <br /><br /> Toter Mysql: <code><pre> ***** Nagios ***** Notification Type: PROBLEM Service: MYSQL Host: Server1 Address: 192.168.0.2 State: CRITICAL Date/Time: Fri Aug 28 20:09:54 CEST 2009 Additional Info: Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)</pre></code> <br /><br /> ==MYSQL testen== Eine Spezialität ist das Checken des MYSQL Servers. Das wollen wir auch über einen Remote Zugriff erledigen. Dazu müssen wir aber auf dem Zielrechner eine Datenbank für Nagios und den User Nagios anlegen, der aber nur lesend auf seine Datenbank zugreifen kann. Uns genügt es zu wissen, ob die DB läuft. Also meldet Euch bitte auf Eurem Zielrechner an der mysql Datenbank an: <code><pre> mysql -u root -p</pre></code> Nun erzeugen wir eine Datenbank und einen Nutzer <code><pre> CREATE DATABASE nagiosdb; GRANT select ON nagiosdb.* TO nagios@localhost; exit</pre></code> Nun wenden wir uns dem Nagios Server zu. Dort öffnet die Datei '''/etc/nagios-plugins/config/mysql.cfg''' und fügt folgende Zeilen ein: <code><pre> # 'ssh_check_mysql' command definition define command{ command_name ssh_check_mysql command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "/usr/lib/nagios/plugins/check_mysql -H localhost -u nagios" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Die '''/etc/nagios3/conf.d/server1_nagios2.cfg''' wird wie folgt ergänzt: <code><pre> define service { host_name Server1 service_description MYSQL check_command ssh_check_mysql use generic-service }</pre></code> Danach nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Spezialfall Mail Queues== Um die Mailqueues zu prüfen benötigt man normalerweise Rootrechte. Wie wir wissen werden aber alle Checks nur als User nagios durchgeführt. Um nun remote einen Test durchzuführen, der beispielsweise den Mail Queues eines Exim4 prüft, müssen wir einen neuen Dienst definieren, der folgendes Kommando absetzt: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "/usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Rootrechte hätte man, wenn der Befehl wie folgt aussieht: <code><pre> /usr/lib/nagios/plugins/check_by_ssh -H 192.168.0.2 -i /home/nagios/.ssh/id_dsa -C "sudo /usr/lib/nagios/plugins/check_mailq -w 40 -c 70 -M exim"</pre></code> Nur nützt uns das wiederum nichts, weil wir hier ein Passwort für Root eingeben müssten. <br /><br /> Um das zu umgehen legen wir auf dem Zielrechner nun fest, dass genau dieser Befehl '''/usr/lib/nagios/plugins/check_mailq''' vom User nagios mit Rootrechte ausgeführt werden darf. Das setzt auf dem Zielrechner als root folgenden Befehl ab: <code><pre> visudo</pre></code> Sollte dieser nicht funktionieren muss noch sudo installiert werden: <code><pre> apt-get install sudo</pre></code> Dort fügt nun eine Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_mailq</pre></code> Speichert die Änderung. Jetzt definiert unter '''/etc/nagios-plugins/config/mail.cfg''' ein neues Kommando: <code><pre> # 'ssh_check-mailq' for exim define command { command_name ssh_check_mailq_exim command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}<br /><br /> Danach wie gehabt den Service für Euren Host anlegen: <code><pre> define service { host_name Server1 service_description Mail-Queues check_command ssh_check_mailq_exim!25!50 use generic-service }</pre></code> Die Argumente ( 25 = Warning , 50 = Critical ) können natürlich entsprechend angepasst werden. <br /><br /> Und nun wie gewohnt: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Der Event Handler== Nun wollen wir alles einwenig automatisieren. Also wenn ein Dienst ausfällt soll uns Nagios versuchen, diesen wieder auszuführen und ans Laufen zu bringen. Hierzu fügen wir als erstes eine neue Zeile in die Datei '''/etc/nagios3/resource.cfg''' ein: <code><pre> $USER2$=/usr/share/nagios3/plugins/eventhandlers</pre></code> In diesem Verzeichnis liegen dann alle unsere Startscripte. <br /><br /> Nun müssen wir uns ein Startscript für den Neustart eines Apache Webservers z.B. anlegen. <code><pre> nano /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Füllt die Datei wie folgt: <code><pre> #!/bin/bash # $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host case $1 in OK) ;; WARNING) ;; CRITICAL) if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /etc/init.d/apache2 restart" fi ;; UNKNWON) ;; esac exit 0</pre></code> Die Datei muss dann ausführbar gemacht werden: <code><pre> chmod +x /usr/share/nagios3/plugins/eventhandlers/restart_apache</pre></code> Nun legen wir uns eine neue Konfigurationsdatei für unsere Handler Kommandos an: <code><pre> nano /etc/nagios3/conf.d/my-handlers_nagios2.cfg</pre></code> Dort definieren wir nun unser neues Event: <code><pre> define command{ command_name restart_apache command_line $USER2$/restart_apache $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Die Änderung wird gespeichert und wir fügen in unserem Apache / http Dienst noch folgende Zeile mit ein: <code><pre> define service { host_name Server1 service_description HTTP check_command check_http use generic-service event_handler restart_apache }</pre></code> Natürlich haben wir hier wieder das Problem, dass auf dem Zielrechner dieser Prozess normal nicht von nagios ausgeführt werden kann. Deswegen müssen wir wieder in der '''/etc/sudoers''' eine Zeile einfügen. Diese Datei bitte nur über <code><pre> visudo</pre></code> auf dem Zielrechner editieren! <br /><br /> Fügt dann folgende Zeile ein: <code><pre> nagios ALL=(root) NOPASSWD: /etc/init.d/apache2</pre></code> Speichert die Änderung ab. Jetzt wieder auf dem Nagios Server ein <code><pre> /etc/init.d/nagios3 reload</pre></code> Killt jetzt zum Test auf Eurem Zielrechner den Apache mit <code><pre> /etc/init.d/apache2 stop</pre></code> Wartet ein wenig ab. Wenn alles richtig konfiguriert ist sollte in wenigen Minuten wieder der Apache laufen. <br /><br /> ==Externes Plugin integrieren oder selbst schreiben== Wer ein zusätzliches Plugin benötigt, der kann sich einmal auf http://exchange.nagios.org umsehen, ob es da nicht schon was passendes gibt. Ich habe das einmal für den Dienst Fail2Ban ausprobiert. Ein Plugin (ist in dem Fall ein Shell Script) findet Ihr beispielsweise hier: http://exchange.nagios.org/directory/Plugins/Security/Firewall-Software/Check-Fail2Ban-Service/details <br /><br /> Ladet nun die Datei '''check_fail2ban.sh''' herunter. Das Plugin muss auf dem Zielrechner ausgeführt werden. Also legt auf dem Zielrechner für eigene Plugins ein Verzeichnis '''/usr/local/share/nagios3/plugins''' an und kopiert das Script dort hin. Dann macht es noch ausführbar: <code><pre> chmod +x /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Wer einmal eigene Plugins auf Scriptbasis schreiben möchte, kann sich dieses Script als Lernbeispiel ranziehen, dort sieht man recht schön, wie das in der Art funktioniert. Da der im Script beinhaltete Befehl fail2ban-client ping nur als root ausgeführt werden kann, muss das noch in der '''/etc/sudoers''' festgelegt werden: <code><pre> visudo</pre></code> Folgende Zeile einbauen: <code><pre> nagios ALL=(root) NOPASSWD: /usr/local/share/nagios3/plugins/check_fail2ban.sh</pre></code> Jetzt können wir unser Check Kommando (remote) auf dem Nagiosserver definieren: <code><pre> # 'ssh_check_fail2ban' command definition define command{ command_name ssh_check_fail2ban command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa // -C "sudo /usr/local/share/nagios3/plugins/check_fail2ban.sh" }</pre></code> {{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}} <br /><br /> Dann natürlich dieses als Dienst integrieren: <code><pre> define service { host_name Server1 service_description Fail2ban check_command ssh_check_fail2ban use generic-service }</pre></code> Und was dann? Richtig! Nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==User Variable setzen== Natürlich könnt Ihr auch in der '''/etc/nagios3/ressource.cfg''' neue Variablen bauen. Um ein wenig Ordnung in die Konfiguration zu bringen solltet Ihr beispielsweise alle eigenen Scripte unter '''/usr/local''' anlegen. Dazu erstmal einen neuen Pfad: <code><pre> mkdir /usr/local/share/nagios3 mkdir /usr/local/share/nagios3/eventhandlers</pre></code> Dort kopiert nun Eure Eventhandler Scripte hin. Editiert die''' ressource.cfg''' und fügt eine neue Zeile ein: <code><pre> $USER5$=/usr/local/share/nagios3/eventhandlers Passt nun Euere Kommandozeilen entsprechend auf die neue Variable an (z.B.) : <code><pre> define command{ command_name restart_proftpd command_line $USER5$/restart_proftpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }</pre></code> Danach wieder nagios neu laden: <code><pre> /etc/init.d/nagios3 reload</pre></code> <br /><br /> ==Remote Plugin Executor (NRPE)== Um auf einem Zielrechner diverse Dienste über Nagios zu beobachten kann man natürlich eine ssh Verbindung aufbauen und ein Plugin remote ausführen. Wesentlich eleganter geht das über den '''NRPE''' Dienst des Nagios. Dazu wird auf dem Zielrechner ein kleiner Dienst installiert, der auf einen bestimmten TCP Port horcht. Wenn dann unser Nagios Server einen Request auf einen externen Dienst absetzt tut er dies über den bestimmten Port (TCP 5666 per default). Dann führt NRPE das Plugin auf dem Zielrechner aus und liefert den Wert wieder an den Nagios Server zurück. <br /><br /> Wir erklären das anhand einer Debianinstallation. Das Prinzip bleibt zwar zumeist bei jeder Distribution gleich, kann aber in der Konfiguration voneinander abweichen. <br /><br /> Dazu muss natürlich ein Nagios Server im Netz vorhanden sein. Dieser findet sich beispielsweise auf 192.168.0.2 <br /><br /> Jetzt installieren wir auf dem Nagios Server zunächst das NRPE Plugin, das später ausgeführt werden muss: <code><pre> apt-get install nagios-nrpe-plugin</pre></code> Nun schreiten wir auf unserem Zielrechner zu Tat und installieren folgende beiden Pakete: <code><pre> apt-get install nagios-plugins nagios-nrpe-server</pre></code> Auch das geht fluchs von der Hand. <br /><br /> Jetzt ändern wir noch eine kleine Sache an der '''/etc/nagios/nrpe.cfg''' <br /><br /> Dort sucht die Zeile <br /><br /> '''allowed_hosts=127.0.0.1''' <br /><br /> und ändert diesen durch die IP Eures Nagios Servers ab: <br /><br /> '''allowed_hosts=192.168.0.2''' <br /><br /> Das stellt sicher, dass dann unser Nagios Server sich an den Zielrechner andocken darf. Sollte dies vergessen werden gibt es eine Meldung später im Nagios, dass der SSH Handshake nicht funktioniert. <br /><br /> Ihr findet bereits ein paar fertig definierte Dienste. Diese könnt Ihr dann als Beispiel für weiter eigene definierte Dienste verwenden: <code><pre> command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</pre></code> Eine Festplatte könnt Ihr beispielsweise mittels deren UUID wie folgt prüfen: <code><pre> command[check_home]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -x /dev/disk/by-uuid/12345-1234... -p /home</pre></code> Der Parameter '''-x''' steht für das Device, das '''-p''' für den Mountpunkt. <br /><br /> Speichert nun die Änderung und vergesst nicht, den NRPE neu zu starten: <code><pre> /etc/init.d/nagios-nrpe-server restart</pre></code> Auf dem Nagios Server können dann die Dienste konfiguriert werden. Bei den Diensten können normalerweise Parameter übergeben werden. Beispielsweise wenn Ihr eine IP oder einen Wert an das Plugin übermitteln wollt, wird das ja bei der Dienstdefinition durch ein ! gelöst. Ihr müsst Hier bei dem NRPE Plugin allerdings eine Kleinigkeit beachten. Es wird zwischen zwei Pluginvarianten unterschieden: NRPE mit und ohne Parameter / Argument. Wenn Ihr also einen Check ohne Argument (beispielsweise bei den check_users) verwenden wollt, dann definiert den Dienst wie folgt: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe_1arg!check_users use generic-service }</pre></code> Der Aufruf also OHNE zusätzliche Parameter/Argumente werden somit mit dem Befehl '''check_nrpe_1arg''' gelöst. Das auszuführende Plugin wird dann mittels '''!''' angehängt. Sollte ein oder mehrere Parameter verwendet werden müssen, dann baut den Service wie folgt auf: <code><pre> define service{ host_name MyServer service_description Current Users check_command check_nrpe!check_irgendwas!10 13 15 use generic-service }</pre></code> Also hier der '''check_nrpe''' , das Plugin mit '''!''' abgetrennt, die Parameter auch mit einem '''!''' und weitere mit einem Leerzeichen abgetrennt. Das nrpe Plugin muss somit nicht extra konfiguriert werden, sondern das erledigt bereits der apt-get. <br /><br /> Wenn Ihr nun den Dienst fertig konfiguriert habt startet den Nagios Server neu: <code><pre> /etc/init.d/nagios3 reload</pre></code> Viel Spaß! <br /><br /> Euer<br /> Pierre "Gargi" Kretschmer <br /><br /> '''Nagios:''' http://www.nagios.org<br /> '''Debian:''' http://www.debian.org <br /><br /> '''Empfehlenswerte Literatur:''' Nagios: System- und Netzwerk-Monitoring http://www.amazon.de/Nagios-System-Netzwerk-Monitoring-Wolfgang-Barth/dp/3937514465 [[Kategorie:NSLU2]] dc344ce182f7ef35ec0fc10b5a4ca71b27f78336 Disc Spindown 0 81 1010 91 2018-06-30T08:52:49Z Admin 1 wikitext text/x-wiki ==Festplatten in den Ruhemodus versetzen (spin-down)== Nachdem Klimaschutz und Energiesparen in aller Munde ist, sollten wir uns auch Gedanken um den Stromverbrauch unseres Mini-Servers machen. Unsere externe Platte soll nun nach einer gewissen Zeit in den Ruhemodus versetzt werden und herunterfahren '''(spin-down)'''. Wenn die Maschine wieder einen Zugriff von außen bekommt soll die Platte wieder hochfahren '''(spin-up)'''. Nur ist es leider nicht so einfach, den Stromsparmodus zu aktivieren und es existieren sehr viele Ansätze, die teilweise funktionieren, aber oft viel Konfigurationsarbeit voraussetzen. Wenn man sich durch diverse Anleitungen arbeitet, gibt es im Grunde drei Wege, die zum gewünschten Ziel führen: '''a)''' Die Harddisk beherrscht das Herunterfahren von sich aus<br /> '''b)''' Wir geben das Timeout der Platte von außen mit<br /> '''c)''' Die NSLU2 wird softwareseitig über Scripte gesteuert<br /> Ich möchte auf das alles nicht wirklich recht tief eingehen, denn im Netz finden sich entsprechende Anleitung. Ich möchte hier nur meinen Ansatz vorstellen, der auf der 2. Basis (Timeout von außen) basiert und recht einfach umzusetzen ist, wenn die Randbedingungen stimmen. '''a) Die Harddisk beherrscht das Herunterfahren von sich aus''' Mache Festplatten oder fertige USB Lösungen haben bereits ein vorprogrammiertes Powermanagement. D.h. sie drehen nach einer gewissen Zeit der Inaktivität herunter oder schalten sich ab. Empfohlen hierfür wird gerne die USB-Box "One Touch"[http://www.maxtorsolutions.com/en/ToolBox/Product_Grid/index.html] von Maxtor. Zudem bieten manche Hersteller Tools zum Einstellen ihrer Festplatten an, wie Hitachi mit ihrem "Feature Tool"[http://www.hitachigst.com/hdd/support/download.htm]. Diese Lösung hat allerdings leider bei mir auf zwei verschiedenen IBM/Hitachi nicht funktioniert. '''b) Wir geben das Timeout der Platte von außen mit''' Unter Linux bietet sich das Tool hdparm zum Regulieren des Spin-Downs an. Hierzu kann man die USB Box öffnen und steckt die Disk an einem IDE-Kabel direkt an seinem Rechner an und schaltet die Box an. Danach bootet man Linux und holt sich die Rootrechte an einer Konsole: <code><pre>su</pre></code> [PASSWORT EINGEBEN] Dann setzen wir den Spin-Down fest: <code><pre>hdparm -k1 -K1 -S120 /dev/hda</pre></code> Für /dev/hda nehmen wir entsprechend unserer angeschlossenen Platte das korrekte Device: Primary Master: '''hda'''<br /> Primary Slave: '''hdb'''<br /> Secondary Master: '''hdc'''<br /> Secondary Slave: '''hdd'''<br /> -S120 legt die Zeit auf 10 Minuten fest. Zum Testen kann man den Wert auch auf 10 Sekunden ( -S10 ) festlegen. Die Parameter -k1 und -K1 versuchen den Wert in die Festplatte dauerhaft zu schreiben, damit nachdem man die Kiste vom Stromnetz genommen hat sich auch noch an den Spin-Down Timer erinnert. Das klappt aber leider nur in den wenigsten Fällen. Von daher muss die Platte im laufenden Betrieb vom IDE Kabel gezogen werden und darf nicht abgeschalten werden. Dann wird der interne IDE Anschluss der USB Box wieder angeschlossen und an die NSLU2 gestöpselt. Schaltet man die Festplatte ab, so muss dieser Vorgang wiederholt werden. Das ist nicht wirklich komfortabel, aber bringt fast immer den gewünschten Erfolg. Da man eigentlich keine IDE-Platte vom laufenden Rechner trennen sollte (der Controller könnte einem das übel nehmen) empfehle ich eine andere Variante: Hierzu benötigt man eine SATA Platte und ein USB Gehäuse für SATA Platten, das sowohl einen SATA Anschluss als auch USB Anschluss mitbringt. Da SATA hotplugfähig ist, kann das Kabel relativ gefahrlos gezogen werden. Ich habe an meinen zweiten SATA Controller meines Mainboards das der USB Box beiliegende Slotblech (SATA Bracket) für einen externen SATA Anschluss angeschlossen. So kann ich die SATA Platte nun via meines SIL Controllers erstmal an meinen Rechner bringen, ohne dass ich das USB Gehäuse aufschrauben und irgendwelche Kabel trennen muss. Ich stecke einfach die Platte im laufenden Linuxbetrieb an und checke erstmal, ob diese erkannt wurde, indem ich folgenden Befehl an der Konsole absetze: <code><pre>dmesg</pre></code> Hier sehe ich auch gleich, als welches Gerät (Device) die Platte erkannt wurde. Dies wird in der Regel /dev/sd... sein. Nun kann ich mittels hdparm den gewünschten Spin-down Timer einstellen: <code><pre>hdparm -k1 -K1 -S120 /dev/sd...</pre></code> Dann ziehe ich einfach den SATA Anschluss ab und stecke den USB-Anschluss wieder an die NSLU2. Die Platte merkt sich nun solange dieses Setting bis das Gerät vom Strom getrennt wird. Damit das natürlich einfach und schnell zu bewerkstelligen ist sollte die NSLU2 nebst USB Platte in der Nähe des stationären Rechners stehen. Das empfiehlt sich auch deswegen, da man auch schnell mal die Harddisk über die SATA Schnittstelle mit größeren Datenpaketen füttern kann. Ansonsten bestünde noch die Möglichkeit dies mittels eines Notebooks zu erledigen, das einen externen SATA Anschluss hat (fertig eingebaut oder via PCMCIA Controller). Hier mein Setup mit einem SATA2 USB-Gehäuse, das beide Schnittstellen bereit hält: [[Bild:slug17.jpg|center]] '''c) Die NSLU2 wird softwareseitig über Scripte gesteuert''' Diverse Scripte, die die Box intern steuern können findet Ihr unter folgendem Link: NSLU2-Linux - FAQ / SpinDownUSBHarddisks [http://www.nslu2-linux.org/wiki/FAQ/SpinDownUSBHarddisks] Hier sei nur gesagt, dass das Setup teilweise nicht trivial ist und einiges an Experimentierfreude voraussetzt. '''Hinweis:''' Der Spin-Down der Platte funktioniert natürlich erst dann, sobald kein Zugriff auf die Platte erfolgt. Hier muss dafür gesorgt werden, dass etwaige Prozesse nicht auf die Platte greifen. Zu überlegen ist hierbei, das OS auf einen USB-Stick zu unslingen und die Platte nur als Datenträger der Homeverzeichnisse zu verwenden. [[Kategorie:NSLU2]] 159ca2b4e805c0263d228f62d9be4e52dc5f5bc9 Overclocking 0 83 1011 913 2018-06-30T08:53:02Z Admin 1 wikitext text/x-wiki ==Phönix aus der Asche ... oder mehr Power== '''HINWEIS/UPDATE: Neue Geräte werden bereits mit der 266MHz Taktung ausgeliefert. Hier ist dieser Schritt nicht mehr notwendig!''' Nachdem ich im Netz einwenig recherchiert habe, habe ich herausgefunden, dass man durch einen kleinen Overclocker-Trick die NSLU2 merklich beschleunigen kann. Verbaut wurde eine 133MHz Intel ARM-CPU (XScale), die allerdings komischerweise laut der machbaren Spezifikation im Grunde nur auf halben Coretakt läuft. Möglich und ausgelegt ist die CPU auf 266 MHz. Durch einen kleinen Eingriff in das Gerät, kann die Sperre aufgehoben werden. Dazu muss das Gerät geöffnet und ein kleiner Widerstand entfernt werden. '''Hinweis:''' Dadurch geht die Garantie verloren. Ebenso sind technische Defekte nicht auszuschließen, die eventuell auch Schäden anrichten können! Allerdings erhöht sich angeblich dadurch der Chip nicht merklich an Temperatur, bzw. die verbrauchte Leistung ist nicht wesentlich höher. Hier das geöffnete Gerät und lokalisierter Widerstand: [[Bild:slug18.jpg|center]] Man kann den Widerstand auslöten (dazu benötigt man feines Werkzeug) oder man schneidet ihn mit einen scharfen Messer vorsichtig durch: [[Bild:slug19.jpg|center]] Bitte testet das Gerät nochmal genau durch, ob alle Funktionen erhalten geblieben sind. Bei mir hat das soweit wunderbar funktioniert. Das muss aber nicht bedeuten, dass es überall so läuft! Also wie gesagt: Nur auf eigene Gefahr und die Garantie des Gerätes ist damit definitiv futsch! Um nun sicher zu gehen, dass die Slug auch mit 266MHz taktet, kann man sich die BogoMIPS anzeigen lassen. Das passt zwar nicht haargenau, aber zeigt, dass der Takt nun entsprechend angehoben ist: <code><pre>root@Hellboy:/>cat /proc/cpuinfo Processor : XScale-IXP425/IXC1100 rev 1 (v5b) BogoMIPS : 263.78 Features : swp half thumb fastmult edsp Hardware : Intel IXDP425 Development Platform Revision : 0000 Serial : 0000000000000000</pre></code> Das Datenblatt zum XScale-IXP425 kann bei Intel hier eingesehen werden [http://www.intel.com/design/network/manuals/252480.htm] Dort steht es als downloadbares pdf-Dokument offen zur Verfügung. [[Kategorie:NSLU2]] 36cfaf82e323b79df6e8201d12ef40cece59e1c0 Fragen zur Slug 0 20 1012 339 2018-06-30T08:53:14Z Admin 1 wikitext text/x-wiki <div style="text-align=right; float: right; clear: none; background: none; padding-left:20px"> __TOC__ </div><noinclude> ==Werden beim Flashen alle Settings gelöscht?== Nein, interne Einstellungen wie die IP Adresse, Name der Slug, Gateway werden beibehalten. <br /> <br /> ==Muss ich neu flashen, wenn ich die Slug neu einrichten will?== Nein, das ist nicht zwingend notwendig. Sollte man eventuell das Gerät so verkonfiguriert haben, dass man es neu aufsetzen möchte, dann genügt es, die Platte zu löschen und neu zu formatieren. Danach kann man das System wie gewohnt unslingen. <br /> <br /> ==Was passiert beim erneuten Unslingen?== Die Slug erkennt, wenn bereits geunslingt wurde. Auch hier funktioniert nicht das ursprüngliche uNSLUng Passwort, sondern Euer bereits gesetztes, obwohl keine Daten mehr auf der Platte zu finden sind. Beim erneuten Unslingen entfernt der Prozess ersteinmal einen Flag und fordert den User zum Neustart auf. Danach noch einmal den Unslingvorgang ausführen. Danach ist das System wieder geunslingt und Ihr könnt die Slug weiter konfigurieren. <br /> <br /> ==Warum findet ipkg update nichts und ich kann via ipkg nichts installieren?== Bitte tragt auf jeden Fall im Webadminbereichbereich einen Nameserver ein. Die Eingabemöglichkeit eines primären Nameservers findet Ihr unter Administration -> LAN. <br /> <br /> [[Kategorie:NSLU2]] 83ddac76c142788c013932bb30eeb178839b8c42 Raspbian auf dem Raspberry Pi 2 installieren 0 229 1013 902 2018-06-30T11:07:21Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Installation:_Raspbian_auf_dem_Raspberry_Pi“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Installation:_Raspbian_auf_dem_Raspberry_Pi c80678414207176103bc43f19569df689294afb1 Automatische Updates 0 235 1014 795 2018-06-30T11:08:33Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Automatische_Updates“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Automatische_Updates b0f8f77bf4147e2f7fc0e687603b456da0614250 Ipv6 aktivieren 0 233 1016 793 2018-06-30T11:09:53Z Admin 1 wikitext text/x-wiki Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Ipv6 5d7f2c3060421b40b3827113398ab57838001f6a Zusätzliche Festplatte und Spindown 0 234 1017 794 2018-06-30T11:10:28Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Zus%C3%A4tzliche_Festplatte_und_Spindown“ wikitext text/x-wiki Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Zus%C3%A4tzliche_Festplatte_und_Spindown 989418d4a4e498c47bf5e09bf04d8b983b2c2713 Serverstatus zumailen 0 261 1018 868 2018-06-30T11:11:08Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Serverstatus_zumailen“ wikitext text/x-wiki Der Beitrag wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Serverstatus_zumailen 332bb0c0fd4534df1b7834ff935ac7179754d7d5 Mediaserver mittels miniDLNA 0 262 1020 869 2018-06-30T11:16:00Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Mediaserver_mittels_miniDLNA“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Mediaserver_mittels_miniDLNA 6fbf5e762fb0487782b951ee36e7cdde7b57bda1 Owncloud installieren 0 237 1021 856 2018-06-30T11:17:59Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Owncloud_auf_dem_Pi_installieren“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Owncloud_auf_dem_Pi_installieren 4d88220c0f9236660465ee6e8cb1c04f60a44768 MediaWiki:Sidebar 8 3 1022 991 2018-06-30T11:18:32Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org|Gargi.org ** Impressum|Impressum und Datenschutz * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * Crossover-Themen ** DOOM auf Linux | DOOM auf Linux ** Server im Eigenbau|Server im Eigenbau * SEARCH * TOOLBOX * LANGUAGES 478c4b21abc3f476d65d0bca8a929e6d9eda9507 1025 1022 2018-06-30T11:21:00Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org|Gargi.org ** Impressum|Impressum und Datenschutz * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * Debian Webserver ** Debian installieren|Debian installieren ** Debian Kernel kompilieren|Debian Kernel kompilieren ** proftp installieren|proftp installieren ** Apache, PHP und mySQL|Apache, PHP und mySQL ** Phpmyadmin installieren|Phpmyadmin installieren ** Mediawiki installieren und nutzen | Mediawiki installieren und nutzen ** Wordpress installieren | Wordpress installieren ** phpBB3 Forum installieren | phpBB3 Forum installieren ** Firewalling: iptables und Fail2Ban|Firewalling: iptables und Fail2Ban ** Auf Viren und Rootkits prüfen | Auf Viren und Rootkits prüfen ** E-Mails via Exim4 verschicken | E-Mails via Exim4 verschicken ** Mailserver auf Debian mit Imap, Smarthost und Filter|Mailserver auf Debian mit Imap, Smarthost und Filter ** SVN Checkout Script|SVN Checkout Script ** Ioquake3 Server und Build Service|Ioquake3 Server und Build Service ** F.E.A.R. Dedicated Server auf Linux|F.E.A.R. Dedicated Server auf Linux * SEARCH * TOOLBOX * LANGUAGES 5186e95f18b7cd19dac54f3122d94b7ab5f772ee 1041 1025 2018-06-30T12:19:36Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** https://www.gargi.org|Gargi.org ** Impressum|Impressum und Datenschutz * NSLU2 ** Slug als Webserver|Slug als Webserver ** Slugdebug|Slugdebug ** Nativ kompilieren|Nativ kompilieren ** Der Crosscompiler|Der Crosscompiler ** chkrootkit|chkrootkit ** cURL Downloader|cURL Downloader ** Firefly mp3 Server|Firefly mp3 Server ** Firewalling|Firewalling ** Backupmaschine|Backupmaschine ** Debian auf der NSLU2|Debian auf der NSLU2 ** Debian 6 und 7 auf der NSLU2|Debian 6 und 7 auf der NSLU2 ** Nagios installieren und konfigurieren|Nagios installieren und konfigurieren ** Disc Spindown|Disc Spindown ** Overclocking|Overclocking ** Fragen zur Slug|Fragen zur Slug * SEARCH * TOOLBOX * LANGUAGES b9ff8663f23c4e6ac647b4509f4ddbb56c6a87b8 Server im Eigenbau 0 86 1023 307 2018-06-30T11:19:34Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Server_im_Eigenbau“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Server_im_Eigenbau 131e2a859d08b842e082bbc983bc50fc3d03770c DOOM auf Linux 0 141 1024 969 2018-06-30T11:20:36Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=DOOM_auf_Linux“ wikitext text/x-wiki Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=DOOM_auf_Linux 55691e2c7f99feaa22fa88e65f5e207c19673d37 Ioquake3 Server und Build Service 0 105 1026 946 2018-06-30T11:23:20Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Ioquake3_Server_und_Build_Service“ wikitext text/x-wiki Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Ioquake3_Server_und_Build_Service 234e19b5f303c0b6411369eb2f3ff39a39edb7cc Mailserver auf Debian mit Imap, Smarthost und Filter 0 103 1027 993 2018-06-30T11:24:28Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Mailserver_auf_Debian_mit_Imap,_Smarthost_und_…“ wikitext text/x-wiki Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Mailserver_auf_Debian_mit_Imap,_Smarthost_und_Filter 41927473dbfe11a72df2d58a871f7ce44a27ea6a Wordpress installieren 0 252 1028 845 2018-06-30T11:26:02Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Wordpress_installieren“ wikitext text/x-wiki Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Wordpress_installieren ed395eff20f1a873e02952d200af96ae260062f0 E-Mails via Exim4 verschicken 0 271 1029 904 2018-06-30T11:28:11Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=E-Mails_via_Exim_verschicken“ wikitext text/x-wiki Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=E-Mails_via_Exim_verschicken e9e955694bc6bd8131eaf74e833c4d6ebd2f118e Apache, PHP und mySQL 0 95 1030 891 2018-06-30T11:28:55Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Apache,_PHP_und_mySQL“ wikitext text/x-wiki Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Apache,_PHP_und_mySQL 1b60931e63cdea8a9946c7f1b66dd2e1cefc8527 Proftp installieren 0 94 1031 843 2018-06-30T11:30:12Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Proftp_installieren“ wikitext text/x-wiki Dieses Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Proftp_installieren 001827fd0b890760ffbcdfba988403e7750ab36b Auf Viren und Rootkits prüfen 0 270 1032 879 2018-06-30T11:32:02Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Auf_Viren_und_Rootkits_pr%C3%BCfen“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Auf_Viren_und_Rootkits_pr%C3%BCfen 24766482cc364370f793b8fd53c02c0391c3c4cc Phpmyadmin installieren 0 97 1033 827 2018-06-30T11:35:07Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Phpmyadmin_installieren“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Phpmyadmin_installieren f9b90ed545d512f5a1d10a3b7c78face10ff8f20 Mediawiki installieren und nutzen 0 238 1034 892 2018-06-30T11:36:19Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Mediawiki_installieren_und_nutzen“ wikitext text/x-wiki Dieses Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Mediawiki_installieren_und_nutzen 3101d66b4d2199c4f29dc7e4df4a246ce8f52e7c Firewalling: iptables und Fail2Ban 0 102 1035 989 2018-06-30T11:37:18Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Firewalling:_iptables_und_Fail2Ban“ wikitext text/x-wiki Dieses Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Firewalling:_iptables_und_Fail2Ban 3e32e58961dc882bc8a890f24eb89202a4a01f55 SVN Checkout Script 0 138 1036 310 2018-06-30T11:39:07Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=SVN_Checkout_Script“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=SVN_Checkout_Script d9938cdd36e0ac8c4ac1d395b91a77a03b6b3b40 F.E.A.R. Dedicated Server auf Linux 0 112 1037 342 2018-06-30T11:42:58Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=F.E.A.R._Dedicated_Server_auf_Linux“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=F.E.A.R._Dedicated_Server_auf_Linux a54c4b4aa3075fa27b0801f93f56730933596dfa Debian Kernel kompilieren 0 93 1038 980 2018-06-30T11:44:57Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Debian_Kernel_kompilieren“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Debian_Kernel_kompilieren cc3736c67a79e7f1c145a575af0646411e3a7343 PhpBB3 Forum installieren 0 264 1039 871 2018-06-30T11:48:15Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=PhpBB3_Forum_installieren“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=PhpBB3_Forum_installieren c625b2501189b29cf9b6e008a9acb2185a2de083 Debian installieren 0 176 1040 979 2018-06-30T12:18:37Z Admin 1 Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Debian_installieren“ wikitext text/x-wiki Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=Debian_installieren 9cb8374fba05c807ab76d715e8d16cfdec380f66 Hauptseite 0 1 1042 957 2018-06-30T12:21:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:serverprojekt08kl.jpg]] </div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 7295d866a9b598b506acfc038c39c755a89b734b 1043 1042 2018-06-30T12:22:45Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div> '''mySLUG''' ist als Sammlung meiner Tutorials entstanden. Hier ging es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider kommt das Gerät in die Jahre und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mir einen stromsparenden Server auf Basis einer intel Atom CPU zusammengebaut und hier ein Debian Linux installiert. Auch hierzu habe ich einige Howtos verfasst, die ich auf dieser Wiki sammle und den interessierten Besucher zum Nachbauen zur Verfügung stelle.<br/> Ich kann natürlich nicht dafür garantieren, dass alles immer so funktioniert wie ich es hier beschreibe, aber die Texte sollen auch eine Art Ideensammlung sein, die man natürlich auch für seine Bedürfnisse anpassen kann und teilweise muss. <br/> Diese Seite soll ebenso beweisen, dass Linux kein Hexwerk ist und Leuten, die tiefer in die Materie einsteigen wollen ein Paket an hilfreichen Texten bieten soll.<br/> <br/> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 68a5559a2107388e24658d6fabbd2342e259293d 1044 1043 2018-06-30T12:26:55Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] <br /> ''Die NSLU2 im Größenvergleich''</div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/> Leider verschwinden auch mehr und mehr Seiten zu dem Thema vom Netz, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus und vielleicht gibt es ja weitere pfiffige Ideen, was man alles damit noch anstellen kann.<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ bf9b11e3044e4689693121d6419eddfd13cda5c0 1045 1044 2018-06-30T12:27:19Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/> Leider verschwinden auch mehr und mehr Seiten zu dem Thema vom Netz, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus und vielleicht gibt es ja weitere pfiffige Ideen, was man alles damit noch anstellen kann.<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 6fb479534d9143a6ff933a338f0054e252b228e5 1046 1045 2018-06-30T12:27:48Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/> Leider verschwinden auch mehr und mehr Seiten zu dem Thema vom Netz, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus ;-)<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 0b84c24858b83132a4d2c651f4dac7fa8a5d3449 1047 1046 2018-06-30T12:29:37Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/> Leider verschwinden auch mehr und mehr Seiten zu dem Thema vom Netz, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus ;-)<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} <br/> <br/> ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 07ba27f6eb1ef7b8c3b713c11969abb15ab17aed 1048 1047 2018-06-30T12:30:06Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/> Leider verschwinden auch mehr und mehr Seiten zu dem Thema vom Netz, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus ;-)<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Darunter weitere spezielle Themen rund um die Servertechnik. Neu ebenso auch Themen im Bereich Gaming, wobei ich hier den Schwerpunkt auf Servertechniken und Linux lege. Angepasst wurde auch das Design auf den nun gebräuchlichen Vector Style. <br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ c1ebe7b61065a52a47d7c8e067efd444bb5ab6e2 1049 1048 2018-06-30T12:31:21Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/> Leider verschwinden auch mehr und mehr Seiten zu dem Thema vom Netz, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus ;-)<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Die weiteren Themen, die nicht speziell die NSLU2 betroffen haben, habe ich auf meine Projektseite https://www.gargi.org verlegt.<br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ b3f43de7701ac156a4f36aab4899f5208c0f1d3c 1050 1049 2018-06-30T12:33:29Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/><br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite http://www.gargi.org findet.<br/><br/> Ebenso schade ist, dass auch mehr und mehr Seiten zu dem Thema aus dem Netz verschwinden, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann. Zudem habe ich über die kleine Slug so viel über Servertechnik gelernt, dass ich mit dieser Page ihr ein wenig meinen Respekt und Dank zeigen möchte.<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus ;-)<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Die weiteren Themen, die nicht speziell die NSLU2 betroffen haben, habe ich auf meine Projektseite https://www.gargi.org verlegt.<br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ 5c3395cd9048c1bc4238e8a4c9721c0a43787bfe 1051 1050 2018-06-30T12:34:28Z Admin 1 wikitext text/x-wiki {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:55%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">mySLUG - Projektseite</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:nslu2_1.jpg|NSLU2]] </div> '''mySLUG''' ist als Sammlung meiner NSLU2 Tutorials entstanden. Hier geht es schwerpunktmäßig um die Linksys NSLU2, die mit einem eigenen Betriebssystem auf Linuxbasis bestückt schnell zu einem kleinen Webserver umfunktioniert werden kann, die zum einen leise arbeitet, wenig Platz wegnimmt und Strom spart.<br/><br/> Leider ist das Gerät mittlerweile in die Jahre gekommen und die kleine ARM CPU mit 32MB Hauptspeicher stößt schnell mal an ihre Grenzen, wenn es um Webaplikationen geht. Daher habe ich mich mittlerweile mit Nachfolgelösungen beschäftigt, die Ihr auf meiner Projektseite https://www.gargi.org findet.<br/><br/> Ebenso schade ist, dass auch mehr und mehr Seiten zu dem Thema aus dem Netz verschwinden, aber ich möchte dennoch die Dokumente online halten, damit vielleicht der eine oder andere Nutzer dieses Geräts sich weiter orientieren kann. Zudem habe ich über die kleine Slug so viel über Servertechnik gelernt, dass ich mit dieser Page ihr ein wenig meinen Respekt und Dank zeigen möchte.<br/> <br/> Und wer weiß ... vielleicht packe ich ja irgendwann aus Nostalgiegründen das Gerät wieder aus ;-)<br><br> Ich wünsche allen Besuchern viel Spaß! <br/> <br/> Euer<br/> Pierre "Gargi" Kretschmer<br/> </div> |} {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Technik</div> <div style="padding:0.4em 1em 0.3em 1em;"> '''mySLUG''' ist auf der mediawiki (http://www.mediawiki.org) aufgebaut und verwendet derzeit das Vector Design. Allerdings stehen die Texte nicht zur Bearbeitung offen, wie man es auf einer Wiki Page erwartet. Ich möchte dabei nur vermeiden, dass die Seite zum Spamen verwendet wird. <br/><br/> Solltet Ihr Hiweise haben oder gar einen Text dieser Seite zur Verfügung stellen wollen, dann schickt mir einfach eine E-Mail. Ich freue mich natürlich über jeden Beitrag. <br/> <br/> Auf der linken Seite findet Ihr das Hauptmenü mit allen Tutorials, die auf dieser Seite hinterlegt sind. Untermenüs gibt es keine. Hierbei möchte ich die Seite so übersichtlich wie möglich machen, damit unsere Besucher auf einen Blick den kompletten Inhalt sehen können. </div> |} ==Änderung== <div style="float:left;text-align:center;padding-right:20px"> [[Bild:logo.png]] </div><br/> '''mySLUG''' steht nun in etwas überarbeiteter Form zur Verfügung. Neben der Aktualisierung der Software haben wir noch einwenig die Struktur geändert. Alle Themen um die NSLU2 selbst findet Ihr im Menü auf der linken Seite. Die weiteren Themen, die nicht speziell die NSLU2 betroffen haben, habe ich auf meine Projektseite https://www.gargi.org verlegt.<br /> Ich hoffe, dass die neue Struktur genauso gefällt wie sie bislang aufgenommen worden ist. <br/> <br/> <br/> <br/> ==Warum Linux?== <div style="float:right;padding-left:20px"> [[Bild:server_kl.jpg]] <br/> </div> Warum man sich gerade mit Linux beschäftigt ist eine gute Frage. Allerdings ist diese heute nicht mehr so oft zu hören als noch in der Zeit, als ich selbst angefangen habe, mich mit Linux zu beschäftigen. Mittlerweile gibt es eine Vielzahl an Distrubutionen auf dem Markt, die es auch absolute Neulinge ermöglicht, schnell und unkompliziert ein freies Betriebssystem auf den Rechner zu installieren.<br/> <br/> Gerade der Begriff "frei" ist es, was Linux so spannend macht. Jeder hat die Möglichkeit, hier auch selbst Hand anzulegen und seine Software weiter zu verbreiten. Wer mag, der kann im Quellcode optimieren, verbessern, anpassen, wie er es benötigt und kann. Das macht Linux zu einem Projekt, das viele Menschen rund um den Globus verbindet. Linux ist Software, die zusammenbringen kann. Alleine aus dem Gesichtspunkt halte ich auch Linux für etwas ganz besonders wertvolles.<br/> <br/> Als ich damals selbst damit angefangen habe, das erste Mal eine Distribution aus dem Hause Suse zu installieren, hatte ich noch einige Jahre an harter Lernarbeit vor mir. Ich weiß, dass ich auch jetzt noch nicht ansatzweise alles gesehen und ausprobiert habe, aber mit der Zeit wächst man in dieses System soweit hinein, sodass man sich immer weiter nach vorne begibt. Und es gibt immer wieder kniffelige Aufgabe zu lösen, die einem ein Erfolgserlebnis bescheren, wenn man die Nuss geknackt hat. Auch hier gibt es in Foren, Newsgroups und Mailinglisten eine Vielzahl an Menschen auf der ganzen Welt, die einem gerne und immer helfen können. Auch das verbindet. Deswegen ist Linux etwas ganz besonderes, deswegen nutze ich Linux. <br/> <br/> Euer<br/> Gargi <br/> <br/> ==Über mich== {| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%" | style="width:100%; vertical-align:top; border:1px solid #660000; background-color: #E0E0E0;" rowspan="1"| <div style="border-bottom:1px solid abd5f5; background-color:#A70D0D; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold; color:White; ">Pierre "Gargi" Kretschmer</div> <div style="padding:0.4em 1em 0.3em 1em;"> <div style="float:left;text-align:center;padding-right:20px"> [[Bild:myself.jpg]] </div> <div style="float:right;padding-left:20px"> [[Bild:knete2.png]] </div> ;kurzer Steckbrief :geboren in Nürnberg :kaufmännische Ausbildung :beschäftigt sich seit 1995 mit PCs und Linux :Hobbies: Computer, Filme, Zeichnen und Mountainbiken :verheiratet, eine Tochter :Musik: Hardrock, Heavy Metal, Wave :berufstätig: ja <br/> <br/> <br/> ;weitere Webprojekte :http://www.gargi.org (meine regelmäßig gepflegte Page) :http://www.pierre-kretschmer.de (Blog, Visitenkarte) :http://www.gargamel.de (Blog, Visitenkarte) </div> |} [[Datei:garg_banner.jpg|center|link=https://www.gargi.org]] __NOTOC__ __NOEDITSECTION__ b17c05b6bc3f7242905fd4a801c27241d5fc0cca Impressum 0 5 1052 985 2018-07-08T19:43:38Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.31.0 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 5d60230e033a3f26106fed2010ae50e8596db26b 1053 1052 2018-10-07T12:14:09Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.31.1 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 56690985e3f048680da9fc0ef0b36e92329ed05b 1055 1053 2019-01-13T11:09:28Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.32.0 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 9c185d67820aa5e19a66b840e0a9d1126c42469b 1056 1055 2019-01-13T11:13:43Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.32.0 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 85e0284e82a4c06c51490a5e0a3d8223c4270265 1058 1056 2019-01-13T11:14:31Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.32.0 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 283bb0e3a01e831f04d5598899ade67dfff7f98c 1059 1058 2019-06-10T21:07:30Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.32.2 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. da5574af933469a3e6c5b875c5d902bf9108504c 1060 1059 2019-06-23T12:27:58Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Ich möchte dem Datenschutz große Bedeutung beimessen. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.32.2 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. cadde84198ac4e1afb188b12140702fc719e337e 1061 1060 2019-08-03T09:25:25Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Ich möchte dem Datenschutz große Bedeutung beimessen. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.33.0 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. d54409abf44ad7a86f00caf294196bdf7d18cd1b 1062 1061 2019-12-27T20:30:15Z Admin 1 wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Ich möchte dem Datenschutz große Bedeutung beimessen. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.34.0 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 82ba49b88099ed35429b96755160d69bd714e7ee 1063 1062 2020-04-13T13:47:36Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Ich möchte dem Datenschutz große Bedeutung beimessen. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Derzeit setze ich die neue Version 1.34.1 ein. Diese scheint auf diesen Cookie zu verzichten, bzw. konnte ich keinen mehr feststellen. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. f3b8b8bbf6c7f4232fd1bcc85b939a65a41c6c70 1064 1063 2020-12-18T12:28:12Z Admin 1 /* Datenschutz */ wikitext text/x-wiki __NOINDEX__ [[Bild:pierrekretschmer.jpg]][[Bild:impressum2.jpg]] ==Wichtige Hinweise== '''Haftung:''' Ich übernehme keine Haftung bei Schäden an Technik (Hardware/Software) oder Eurer Gesundheit die durch oder nach Anwendung einer Anleitung auf dieser Seite entstehen. Wer die Firmware seiner Geräte verändert, oder an Hardware Änderungen vornimmt muss damit rechnen, dass etwas schief gehen kann und zudem Garantieansprüche verloren gehen. Ich möchte auch hier insbesondere auf Sicherheitsbestimmungen bezüglich Arbeiten an elektrischen Geräten hinweisen: Vor Öffnen der Geräte IMMER Netzstecker ziehen, um einen Stromschlag zu vermeiden. '''Links:''' Für alle Links auf meiner Seite gilt und ich erkläre das ausdrücklich, daß ich keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten habe. Deshalb distanziere ich mich hiermit ausdrücklich von allen Inhalten aller verknüpften Seiten und mache mir diese Inhalte nicht zu Eigen. '''Firmen-/Produktnamen:''' Alle auf diesen Seiten genannten Firmennamen, Logos und/ oder Produktbezeichnungen sind ggf. geschützt oder Warenzeichen der jeweiligen Firmen. '''Für diese Seite gilt:''' Hierbei handelt es sich um ein privates, nichtkommerzielles Projekt. Es werden weder durch Nennung einzelner Produktnamen, Anbringung durch Links oder Banner noch durch sonstige Nutzung Einnahmen getätigt. Sponsoring oder Spenden bestehen nicht. Da es sich bei “myslug.de” um eine private Homepage mit Weblog/wiki handelt, behält der Inhaber es sich vor, Kommentare und Gästebucheinträge nicht zu zu lassen. Auf dieser Seite können keine Kommentare hinterlassen werden und keine Benutzerkonten angelegt werden. Alle Beiträge unterliegen dem alleinigen Urheberrecht des Seiteninhabers und dürfen ohne vorherige Genehmigung nicht vervielfältigt werden ==Datenschutz== Ich möchte dem Datenschutz große Bedeutung beimessen. Die Erhebung und Verarbeitung Deiner personenbezogenen Daten geschieht unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der EU-Datenschutzgrundverordnung (DSGVO). Diese Erklärung beschreibt, wie und zu welchem Zweck Deine Daten erfasst und genutzt werden und welche Wahlmöglichkeiten Du im Zusammenhang mit persönlichen Daten hast. Durch Deine Verwendung dieser Website stimmst Du der Erfassung, Nutzung und Übertragung Deiner Daten gemäß dieser Datenschutzerklärung zu. '''1. Kommentare und Konten:''' Es wird bei den Beiträgen keine Kommentarfunktion zugelassen. Es handelt sich hierbei um eine reine Informationsseite. Ebenso lassen wir keine Registrierung von Nutzerkonten zu. Somit erfasst myslug.de keine entsprechenden persönliche Nutzerdaten, außer die in Punkt 5 erwähnten Informationen, die Dein Browser beim Besuch auf dem Webserver hinterlässt. '''2. Cookies:''' Um einige Funktionen bereit zu stellen, verwendet die zur Grunde liegende Software Wikimedia Cookies. Cookies sind kleine Dateien, die der Browser zwischenspeichert, um die Nutzung des Angebots zu erleichtern, wie z.B. das Merken eines getätigten Logins. Myslug.de bietet sehr wenige dieser möglichen Funktionen an. Welche Cookies zu welchen Zweck über MediaWiki verwendet werden können, wird hier erläutert: [https://meta.wikimedia.org/wiki/Privacy_policy/FAQ#cookieFAQ examples of types of cookies ]<br> Bis zur Version 1.30 der Mediawiki wurde beim Besuch ein Cookie mit dem Inhalt cpPos Time gesetzt. Dieser Cookie ist technisch notwendig und optimiert beim Abruf der Texte den Datenbankcache der Seite und stellt sicher, dass die aktuelle Version des Textes angezeigt wird. Der Inhalt des Cookies wird nach verlassen der Page wieder gelöscht. Beim reinen Besuch dieser Seite werden keine Cookies damit mehr hinterlegt.<br> Grundsätzlich: Falls Du nicht möchtest, dass Cookies auf Deinem Rechner gespeichert werden, kannst Du die entsprechende Option in den Systemeinstellungen Deines Browsers deaktivieren. Gespeicherte Cookies können in den Systemeinstellungen des Browsers gelöscht werden. Der Ausschluss von Cookies kann zu einer möglichen Funktionseinschränkungen des aufgerufenen Onlineangebotes führen. '''3. Eingebettete Inhalte von anderen Websites: ''' Eingebettete Inhalte von anderen Websites verhalten sich exakt so, als ob der Besucher die andere Website besucht hätte. Diese Websites können Daten über dich sammeln, Cookies benutzen, zusätzliche Tracking-Dienste von Dritten einbetten und deine Interaktion mit diesem eingebetteten Inhalt aufzeichnen, inklusive deiner Interaktion mit dem eingebetteten Inhalt, falls du ein Konto hast und auf dieser Website angemeldet bist. Auf myslug.de sind keine Inhalte (Videos, Bilder etc.) von anderen externen Seiten/Anbietern eingebettet. Sollte ich eventuell Tutorial Videos z.B. bei Anbietern wie Youtube hochladen, zeigt höchstens ein Link auf dieses Video, über den Ihr dann das Video auf der externen Seite ansehen könnt, falls Ihr es wünscht. Damit vermeide ich, dass Ihr beim Klicken auf eines meiner Tutorials ungewollt eine Verbindung zu Youtube etc. herstellt. '''4. Analysedienste:''' Myslug.de verwendet innerhalb des MediaWiki Systems keinerlei Analyseplugins und auch keine weiteren Analysedienste wie z.B. Google Analytics. '''5. Log Daten:''' Wir, der Websitebetreiber bzw. der Seitenprovider/Hoster, erheben aufgrund unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO) Daten über Zugriffe auf die Website und speichern diese als „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten werden so protokolliert: * Besuchte Website<br> * Uhrzeit zum Zeitpunkt des Zugriffes<br> * Menge der gesendeten Daten in Byte<br> * Quelle/Verweis, von welchem du auf die Seite gelangt bist (Verlinkungen)<br> * Verwendeter Browser<br> * Verwendetes Betriebssystem<br> * Verwendete IP-Adresse<br> Die Server-Logfiles werden für maximal 7 Tage gespeichert und anschließend gelöscht. Die Speicherung der Daten erfolgt aus Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können. Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist. '''6. Social Media Plugins:''' Wir verwenden keine Social Media Plugins '''7. Umgang mit Kontaktdaten:''' Nimmst du mit uns als Websitebetreiber durch die angebotenen Kontaktmöglichkeiten Verbindung auf, werden deine von dir getätigte Angaben gespeichert, damit auf diese zur Bearbeitung und Beantwortung deiner Anfrage zurückgegriffen werden kann. Ohne deine Einwilligung werden diese Daten natürlich nicht an Dritte weitergegeben. Es besteht online nur die Möglichkeit, per E-Mail Kontakt mit mir aufzunehmen. Gerne lösche ich den Mailverlauf, solltes du dies mir in deiner Mail mitteilen. '''8. Sicherheit:''' Myslugl.de beschäftigt sich thematisch in einigen Tutorials auch über das Thema IT Sicherheit (z.B. Firewalling, oder Virenschutz auf Mailservern). Das Thema liegt mir dementsprechend am Herzen und von daher ist es auch für mich wichtig, den Besuchern ein sicheres Gefühl beim Aufruf meiner Website zu geben. Natürlich kann man nie eine 100%ige Garantie geben, aber zumindest einiges für die Sicherheit tun. Auf der Ebene meiner Homepage verwende ich eine Installation der Mediawiki, die ich regelmäßig update, wenn neue Versionen erscheinen. Zudem verwende ich keine zusätzlichen <u>externe/fremde</u> Plugins oder Skins/Templates. Infos zur verwendeten Version und den mitgelieferten Plugins/Skins findest Du hier: '''[[Spezial:Version | Lizenz / Versionsübersicht ]]'''. Für weitere Serversicherheit sorgt der Provider, der mir den Webspace für meine Homepage zur Verfügung stellt.<br> Aber: Wichtig ist es auch, grundsätzlich geeignete Maßnahmen zu kennen und anzuwenden, um sich und andere zu schützen. Was Du unter anderem tun kannst, um Deinen Computer vor den Gefahren des Internets zu bewahren, habe ich hier kurz zusammen gefasst: '''[https://www.gargi.org/index.php?title=Tipps_zum_Thema_Sicherheit_am_PC Tipps zum Thema Sicherheit am PC]''' '''9. Rechte des Nutzers:''' Du hast als Nutzer das Recht, auf Antrag eine kostenlose Auskunft darüber zu erhalten, welche personenbezogenen Daten über dich gespeichert wurden. Da auf Myslugl.de keine weiteren persönliche Daten für den Besuch dieser Seite abgefragt oder benötigt werden, betrifft dies nur die standardmäßigen Log Dateien auf dem Server des Providers, die nach 7 Tagen automatisch gelöscht werden (Siehe Punkt 5). Solltest du annehmen, dass Ihre Daten unrechtmäßig verarbeitet wurden, kannst du eine Beschwerde bei der zuständigen Aufsichtsbehörde einreichen. '''10. Löschung/Berichtigung von Daten:''' Sofern dein Wunsch nicht mit einer gesetzlichen Pflicht zur Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert, hast du ein Anrecht auf Löschung/Berichtigung deiner Daten. Falls eine Löschung nicht durchgeführt werden kann, da die Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt eine Einschränkung der Datenverarbeitung. In diesem Fall werden die Daten gesperrt und nicht für andere Zwecke verarbeitet. Neben den in Punkt 5 erwähnten Log Dateien erhebt Myslug.de keine weiteren Daten, die gelöscht/berichtigt werden können. Serverlogdatein löscht der Provider spätestens nach 7 Tagen, sollten diese nicht zur Beweissicherung dienen. '''11. Kontakt:''' Wenn du eine Auskunft über die zu deiner Person gespeicherten personenbezogenen Daten wünschst oder weitere Fragen bzgl. der Erhebung, Verarbeitung oder Verwendung deiner personenbezogenen Daten auf Myslug.de hast , wende dich bitte über die oben aufgeführte E-Mail Adresse an mich. 210e1915177d8da06e481e735357e9201426a711 Datei:Impressum2.jpg 6 279 1057 2019-01-13T11:13:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709